1、点乘学习:
//判断前后
//找到两个向量的夹角,判断法线 = Cos(A点乘B)
//A向量投影B向量上,P = kB(标准向量) K = B.length * cos夹角,用作垂直与平行的分解
投影说明 : 蓝图实现:
// ^
a 这样代表( ^ )符号代表,标准向量 (A-B).normalize
2、叉乘:
//判断左右:在一个平面上,A X B = 正数:A在B的右面,负数:A在B左面
X A
^
|
|
|
————————> Y B
//判断内外:
//逆时针对AB叉乘AP,BC叉乘AP,CA叉乘AP,如果都左面,则在内面,只有一种判断不在左面,则在外面
//同一个方向,在内面,有一个不同,在外面
A
/\
/ \
/ P \
B------C
3、已知两点(A,B)位置,夹角90度,求A点平移的C点
1、vector2d =(B点 - A点 ).normalize2d
2、vector = (vector2d 叉乘( 0,0,1)).normalize
3、(verctor * offsetValue) + A点 = C点
理解:已知一个向量,与z轴向量叉乘,得出第三个垂直向量。
4、矩阵旋转
使用蓝图实现:
把Point点旋转Angel角度
注:绕着某一点旋转,需要旋转后+平移位置
FVector2D MatrixRotator(FVector2D OriginPoint, FVector2D RotationPoint, float InAngel)
{
//公式:x' = xCosθ - ysinθ, y'=xsinθ + yCosθ
float X = RotationPoint.X * FMath::Cos(PI / (180.f) * InAngel) -
RotationPoint.Y * FMath::Sin(PI / (180.f) * InAngel);
float Y = RotationPoint.X * FMath::Sin(PI / (180.f) * InAngel) +
RotationPoint.Y * FMath::Cos(PI / (180.f) * InAngel);
//绕着原点旋转
return FVector2D(X, Y) + OriginPoint;
}
5、最大公约数
把正方形填满矩形,需要获取正方形的边长(则最大公约数)
举例: 如果宽是100 高是50 最大公约数算出来是50 那么用50x50正方形可填充,如果 宽60 高40 那么最大公约数是20。