1

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

图片

A将要旋转C

随着A旋转CB&D将随着位置一起移动A并保持在相同的“位置” A

因此,例如,如果A旋转C90 度B&D然后会移动并处于此位置

图片

但我不是很擅长三角,所以我真的不知道我需要的数学来找到B&基于旋转D了多少。AC

我如何找到BD根据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];
4

2 回答 2

4

您可以(x, y)通过执行简单的矩阵乘法来围绕原点旋转一个点,它为变换后的点提供以下方程(x0, y0)

x0 = x * cos(theta) - y * sin(theta);
y0 = x * sin(theta) + y * cos(theta);
于 2017-01-11T06:09:36.883 回答
1

所以你知道 A 相对于 C 的相对 2d 位置。可以说它是 (ax, ay)。

如果您将 product(0,0,1) 与 (ax, ay, 0) 相乘,您会发现 D 的相对位置类似于 (dx, dy, 0)

d = (dx, dy) 是D的相对位置。b也是-d

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

于 2017-01-11T06:00:24.857 回答