例如,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. 鉴于定义四面体和它们之间的所有3角2 3的顶点,发现第3顶点
- 2. 点之间的编程角度
- 3. 寻找两点之间的角度
- 4. 计算两个纬度/经度点之间的夹角
- 5. Java:以度为单位计算两个点之间的角度
- 6. 2个GPS坐标之间的角度
- 7. 使用点积来计算两个向量之间的角度
- 8. 计算android中三个点之间的角度
- 9. 网格中三角形顶点之间的插值
- 10. OrientDB顶点标签和顶点类之间的区别
- 11. 如何找到四个顶点之间的Y点? HLSL
- 12. 顶点集合之间的流程
- 13. 我怎样才能找到一个圆的两个点之间的角度?
- 14. 具有相同原点的两条线之间的角度?
- 15. 计算由两点定义的线之间的角度
- 16. 从直角三角形和一个顶点的两侧查找未知顶点
- 17. 立方体中的空间对角线之间的角度?
- 18. 分裂两个度数值之间的角度
- 19. 图的两条边之间的角度
- 20. 确定圆上两点之间相对于中心的角度
- 21. 如何找到2对点之间的角度?
- 22. 试图计算圆上两点之间的角度?
- 23. 描述点之间的相对角度(如驾驶方向)
- 24. 两点坐标之间的角度相应地旋转图像
- 25. 计算2点之间的反时针角度
- 26. 蟒蛇,openCV,链码 - >我想找点之间的角度
- 27. 计算两个日期时间之间的角度
- 28. 组件之间的角度沟通
- 29. 矢量与平面之间的角度
- 30. 获取矢量之间的xyz角度?
如果这是一个数学网站,我会试图标记这个作业。 ;)这是简单的三角。 http://en.wikipedia.org/wiki/Trigonometry#Common_formulas – Cogwheel 2010-06-16 21:57:33
不,这是一个个人项目 – jmasterx 2010-06-16 21:58:22