gpt4 book ai didi

c++ - 3D vector 的角度 - 获得两者

转载 作者:太空狗 更新时间:2023-10-29 20:43:20 26 4
gpt4 key购买 nike

我有一个物体 A,有一个速度。速度指定为 3D vector a = (x, y, z)。位置是 3D 点 A [X, Y, Z]。我需要查明当前速度是否将此对象引导到位置 B [X, Y, Z] 上的另一个对象 B。
我已经在两个维度上成功地实现了这一点,忽略了第三个维度:

   /*A is projectile, B is static object*/
//entity is object A
// - .v[3] is the speed vector
//position[3] is array of coordinates of object B


double vector[3]; //This is the vector c = A-B
this->entityVector(-1, entity.id, vector); //Fills the correct data
double distance = vector_size(vector); //This is distance |AB|
double speed = vector_size(entity.v); //This is size of speed vector a

float dist_angle = (float)atan2(vector[2],vector[0])*(180.0/M_PI); //Get angle of vector c as seen from Y axis - using X, Z
float speed_angle = (float)atan2((double)entity.v[2],entity.v[0])*(180.0/M_PI); //Get angle of vector a seen from Y axis - using X, Z
dist_angle = deg180to360(dist_angle); //Converts value to 0-360
speed_angle = deg180to360(speed_angle); //Converts value to 0-360
int diff = abs((int)compare_degrees(dist_angle, speed_angle)); //Returns the difference of vectors direction

我需要创建完全相同的比较以使其在 3D 中工作 - 现在,Y 位置和 Y vector 坐标被忽略。
我应该如何计算才能得到第二个角度?

编辑基于答案:
我正在使用球坐标并比较它们的角度来检查两个 vector 是否指向同一方向。一个 vector 是 A-B,另一个 vector 是 A 的速度,我正在检查 id A 是否正在前往 B。

最佳答案

我假设您正在寻找的“第二个角度”是 φ。也就是说,您使用的是球坐标:

(x,y,z) => (r,θ,φ)
r = sqrt(x^2 + y^2 + z^2)
θ = cos^-1(z/r)
φ = tan^-1(y/x)

但是,如果您只想知道 A 是否以速度 a 向 B 移动,则可以使用点积作为基本答案。

1st vector: B - A (vector pointing from A to B)
2nd vector: a (velocity)
dot product: a * (B-A)

如果点积为 0,则意味着您没有靠得更近 - 您正在围绕一个恒定半径的球体移动 ||B-A||以 B 为中心。如果点积 > 0,则说明您正在向该点移动,如果点积 < 0,则说明您正在远离该点。

关于c++ - 3D vector 的角度 - 获得两者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15580952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com