根据点围绕中心点旋转多少来找到2个点

时间:2017-01-11 05:51:13

标签: c++ math rotation trigonometry 2d-vector

我正在制作一个小游戏,而我现在正致力于“雷达”。现在要做到这一点,我需要根据一个点绕中心点旋转多少来找到两个点。

image

A将围绕C旋转。

A围绕CB& D将与A一起移动,并根据A的位置保持相同的“位置”。

例如,如果A围绕C旋转90度B& D然后移动并处于此位置

image

但我不是很擅长触发,所以我真的不知道为了找到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];

2 个答案:

答案 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

https://en.wikipedia.org/wiki/Cross_product