簡體   English   中英

從任意原點找到兩個向量之間的角度

[英]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.

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