3

我最近在寻找如何为游戏创建简单的机器人,有两种方法可以做到这一点 1 是使用 atan2 和 sin 例如计算俯仰和偏航

但是还有另一种方法人们如何计算它,我的问题是它是如何工作的? 这个方法我完全明白

代码:

void CalcAngle(float *src, float *dst, float *angles)
{
    double delta[3] = {(src[0] - dst[0]), (src[1] - dst[1]), (src[2] - dst[2])};

    int x = 0;
    int y = 1;
    int z = 2;

    float hyp = delta[x] * delta[x] + delta[y] * delta[y];
    angles[0] = asinf(delta[z] / hyp) * 180 / pi;
    angles[1] = atanf(delta[y] / delta[x]) * 180 / pi;

    if(angles[0] > 0.0)
    {
        angles[1] += 180;
    }
}

和我的想象人们是如何做到的 第二个我不明白

如果有人知道这段代码发生了什么,你能向我解释一下它是如何计算有效值的。例如,它不能计算第三象限和第二象限的角度,那么它是如何对其他人起作用的呢?为什么他们要计算三角形的相邻而不是斜边的对立?我不会问这段代码是否是一个案例,但我已经在很多案例中看到了。

为了更清楚

4

1 回答 1

1

代码确实似乎是错误的。你应该使用atan俯仰和atan2偏航。

double hyp = sqrt(delta[x] * delta[x] + delta[y] * delta[y]);
angles[0] = atan(delta[z] / hyp) * 180 / pi; // Pitch
angles[1] = atan2(delta[y] / delta[x]) * 180 / pi;  // Yaw
if(angles[1] < 0.0)
    angles[1] += 180;
于 2021-05-27T14:58:37.477 回答