[英]Find the angle between two vectors from an arbitrary origin
我想知道當原點不是 O(0,0,0) 而是 (a, b, c) 時如何獲得圖片上的角度,其中 a、b 和 c 是變量。
B 是與 A(d, e, f) 和原點成 90 度的點。
圖片在這里:
首先,從 A 和 B 中減去原點:
A = A - origin
B = B - origin
然后,歸一化向量:
A = A / ||A||
B = B / ||B||
然后求A和B的點積:
dot = A . B
然后求反余弦。 這是你的角度:
angle = acos(dot)
(請注意,結果以弧度為單位。要轉換為度數,請乘以 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));
}
首先,從 A 和 B 中減去原點:
A = A - origin
B = B - origin
然后取它們的大小比的反余弦:
angle = acos(|B|/|A|)
然后角簽名:
double degrees(double radians)
{
return (radians*180.0)/M_PI;
}
double angle=atan2(v1.x*v2.x+v1.y*v2.y,v1.x*v2.y-v1.y*v2.x);
angle=degrees(angle);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.