C ++向量和点

时间:2017-06-27 08:04:07

标签: c++ vector angle

我得到了2分own=(x, y, z)en=(x, y, z),这代表了我在世界上的位置和其他一些球员的位置。另一位玩家也获得pitch(从90度到-90)和yaw(0到360)。我想计算其他玩家外观和我自己位置之间的角度。

在2D中,alpha是我试图计算的:

enter image description here

int main()
{
    float own_x = 1, own_y = 1, own_z = 1;
    float en_x = 10, en_y = 1, en_z = 10;
    float pi = 3.14159265;
    float pitch = 0.f * (pi / 180), yaw = 45.f * (pi / 180);
    float x = sin(yaw) * cos(pitch);
    float y = sin(pitch);
    float z = cos(pitch) * cos(yaw);
    float vec_length = sqrt(pow(en_x - own_x, 2) + pow(en_y - own_y, 2) + pow(en_y - own_y, 2));
    x /= vec_length;
    y /= vec_length;
    z /= vec_length;
    float cos_t = ((en_x - own_x)*x + (en_y - own_y)*y + (en_z - own_z)*z) / sqrt(pow(en_x - own_x, 2) + pow(en_y - own_y, 2) + pow(en_y - own_y, 2));
    float arc = acos(cos_t) * (180 / pi);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

  1. 你用en-own的长度划分两次:你应该删除 vec_lengthxyz /= vec_length
  2. cos_t的分部有错误,您在_y两次使用_y 表达式而不是_z和{{1}}
  3. 注意:使用x * x代替pow(x,2),通常更快(编译器可能不会将pow(x,2)优化为x * x)。