我正在制作一个小游戏,而我现在正致力于“雷达”。现在要做到这一点,我需要根据一个点绕中心点旋转多少来找到两个点。
A
将围绕C
旋转。
当A
围绕C
,B
& D
将与A
一起移动,并根据A
的位置保持相同的“位置”。
例如,如果A
围绕C
旋转90度B
& D
然后移动并处于此位置
但我不是很擅长触发,所以我真的不知道为了找到B
& D
取决于A
围绕C
旋转了多少。
我如何找到B
& D
基于A
围绕C
旋转了多少?
我认为最后的数学看起来有点类似于此:
float * returnB(float * APoint, float * CPoint)
{
float B_Out[2];
//calculate where B is based off A & C
B_Out[0] = B_X;
B_Out[1] = B_Y;
return B_Out;
}
float B[2];
B[0] = returnB(A,C)[0];
B[1] = returnB(A,C)[1];
float * returnD(float * APoint, float * CPoint)
{
float D_Out[2];
//calculate where D is based off A & C
D_Out[0] = D_X;
D_Out[1] = D_Y;
return D_Out;
}
float D[2];
D[0] = returnD(A,C)[0];
D[1] = returnD(A,C)[1];
答案 0 :(得分:4)
您可以通过执行简单的矩阵乘法在原点周围旋转点(x, y)
,该矩阵乘法为变换后的点(x0, y0)
提供以下等式:
x0 = x * cos(theta) - y * sin(theta);
y0 = x * sin(theta) + y * cos(theta);
答案 1 :(得分:1)
所以你知道A相对于C的相对2d位置。让我们说它是(ax,ay)。
如果你用(ax,ay,0)交叉乘积(0,0,1),你会发现D的相对位置,如(dx,dy,0)
d =(dx,dy)是D的相对位置。 b也是-d