簡體   English   中英

向量與點之間的C ++角度

[英]C++ Angles between a vector and a point

我得到2分own=(x, y, z)en=(x, y, z)代表了我在世界上的位置以及其他球員的位置。 另一位玩家也獲得了pitch (從90度到-90)和yaw (0到360)。 我想計算其他玩家的表情和我自己的位置之間的角度。

在2D中,alpha是我要計算的內容:

在此處輸入圖片說明

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. 您用en-own的長度划分兩次:應該刪除vec_lengthxyz /= vec_length
  2. 您在cos_t處的cos_t有問題,您在表達式中使用_y兩次,而不是_y_z

注意:使用x * x代替pow(x,2),通常速度更快(編譯器可能無法將pow(x,2)優化為x * x)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM