找到来自任意原点的两个向量之间的角度

sta*_*est 2 c++ math 3d vector angle

我想知道当原点不是O(0,0,0)时如何获得图像上的角度,但是(a,b,c)其中a,b和c是变量.

B是与A(d,e,f)和原点成90度的点.

图像在这里:

截图

Pet*_* O. 8

首先,从A和B中减去原点:

A = A - origin
B = B - origin
Run Code Online (Sandbox Code Playgroud)

然后,规范化向量:

A = A / ||A||
B = B / ||B||
Run Code Online (Sandbox Code Playgroud)

然后找到A和B的点积:

dot = A . B
Run Code Online (Sandbox Code Playgroud)

然后找到反余弦.这是你的角度:

angle = acos(dot)
Run Code Online (Sandbox Code Playgroud)

(注意结果是弧度.要转换为度数,乘以180除以π.)

以下是使用GLM实现此方法的C++源代码:

float angleBetween(
 glm::vec3 a,
 glm::vec3 b,
 glm::vec3 origin
){
 glm::vec3 da=glm::normalize(a-origin);
 glm::vec3 db=glm::normalize(b-origin);
 return glm::acos(glm::dot(da, db));
}
Run Code Online (Sandbox Code Playgroud)