例如,GetAngle((0,0),(100,0),(100,100))= 90.我怎麼能找到3個2D點之間的角度。3個頂點之間的角度
回答
給定點A,B和C,你想要AB和AC之間的角度?首先計算向量AB和AC--它只是B的座標減去A的座標,對於AC也是如此。取兩個向量的dot product。這只是x座標加上矢量y座標乘積的乘積。將該數字除以AB的長度,再除以AC的長度。這個結果是兩個向量之間角度的餘弦,所以採用arccos()並且你有它。
使用點積:
(a,b,c) dot (d,e,f) = ad + be + bf
。
A dot B = length(A)*length(B)* cos(theta)
theta = arccos((A dot B)/(length(A)*length(B))
是向量A和B.
之間的角度這是很容易,如果你有線性代數的一些基本知識。
向量v(在線性代數意義上,不是std :: vector;))是一個元組v =(x,y,z)。
該範數是矢量的長度| v | = SQRT(X X + Y Y + Z * Z)
的兩個向量V1 =(X1,Y1,Z1)和v2 =(X2,Y2,Z2)的內積爲v1·V2 = X1 * X2 + Y1 * Y2 + Z1 * Z2
矢量v1和v2的角度爲α= ACOS(V1·V2 /(| V1 | * | V2 |))
謝謝!我也喜歡這個:-) – jmasterx 2010-06-16 22:02:20
與只使用的問題這裏的點積是它在0或180度附近不穩定--acos()的斜率接近+/- 1.0的無窮大,這將導致您失去精度。
爲了解決這個問題,就可以計算僞叉積,並使用ATAN2(),如下所示:
// given A, B, C are 2D points:
BA= B - A; CA= C - A // vector subtraction, to get vector between points
dot= BA.x * CA.x + BA.y * CA.y
pcross= BA.x * CA.y - BA.y * CA.x
angle= atan2(pcross, dot) // this should be the angle BAC, in radians
這應該是數值魯棒除非角度的腿部中的一個具有零長度。
請注意,這也會給你一個簽名的角度,這取決於BAC是順時針還是逆時針旋轉; acos()方法總會給你一個正面的價值。當然,如果你只想要一個積極的角度,你可以拿abs(angle)
; atan2()方法仍然更健壯,可能更快。
- 1. 三個矢量點之間的角度
- 2. 鑑於定義四面體和它們之間的所有3角2 3的頂點,發現第3頂點
- 3. 高度圖上2個頂點之間的空間
- 4. 尋找兩點之間的角度
- 5. 點之間的編程角度
- 6. 兩點之間的Matlab角度
- 7. 用pygame找到點之間的角度
- 8. 2點與atan2之間的角度
- 9. 兩點之間的簽名角度
- 10. Java:以度爲單位計算兩個點之間的角度
- 11. 計算兩個緯度/經度點之間的夾角
- 12. 兩個向量之間的角度matlab
- 13. 2個GPS座標之間的角度
- 14. 兩個3D矢量之間的角度
- 15. 使用點積來計算兩個向量之間的角度
- 16. 計算android中三個點之間的角度
- 17. 簽署3分之間的角度,結果不好
- 18. 是什麼Transform.RotateAround(點,軸,角度)之間的差;和Transform.RotateAround(軸線,角度)
- 19. OrientDB頂點標籤和頂點類之間的區別
- 20. 如何查找樹的任意兩個頂點之間的邊或頂點數?
- 21. 查找兩個頂點(節點)之間的所有路徑
- 22. 如何找到四個頂點之間的Y點? HLSL
- 23. matplotlib箭頭3點之間
- 24. 頂點集合之間的流程
- 25. 平滑頂點之間的顏色
- 26. 我怎樣才能找到一個圓的兩個點之間的角度?
- 27. QSGGeometryNode 3個頂點的深度(z)問題
- 28. 計算由兩點定義的線之間的角度
- 29. 具有相同原點的兩條線之間的角度?
- 30. 從直角三角形和一個頂點的兩側查找未知頂點
如果這是一個數學網站,我會試圖標記這個作業。 ;)這是簡單的三角。 http://en.wikipedia.org/wiki/Trigonometry#Common_formulas – Cogwheel 2010-06-16 21:57:33
不,這是一個個人項目 – jmasterx 2010-06-16 21:58:22