我一直在做一个项目,我必须使用它的凸包,以及格雷厄姆扫描的具体方法。问题已经解决,直到我想分类点的地方。 所以故事是我收集了他们来自类型点的一堆点,它们的坐标是亲戚。意思是它们来自鼠标事件x和y。所以我已经将鼠标位置收集为点的x和y。我想找到与支点相关的角度。有没有人有一段代码来计算该角度? 许多许多感谢,下面的图片是我需要的: 找到与关键点相关的点的角度
回答
使用
Math.atan2(dy, dx)
其中dy
和dx
代表点和支点之间的垂直和水平的差异。
的几个注意事项要牢记:
参考(0弧度)根据约定指向右侧,而不是左侧为你的形象。如果你真的想从左边测量它,你必须做
Math.PI - angle
转换它。Math
-trigonometry函数以弧度表示。要将结果转换为度数,可以使用Math.toDegrees
。在数学世界中,增加的y值指向上。在你的形象中,他们指向下方。
获得从连接的任何两个点的线的水平角度P1 & P2: 角度= ATAN((p1.y - p2.y)/(p1.x - p2.x)
所以,你的黑色角= ATAN((454-243)/(286-108)) 注:反转作为y轴的ý符号开始于左上方,而不是左下
角将以弧度转换为度(180/pi)
请注意,通过使用'atan',您需要手动计算角度位于哪个象限。 (例如,“(454-243)/(286-108)'看起来与点颠倒时相同:'(243-454)/(108-286)'。)'Math.atan2'可以采用关心这个给你。 – aioobe 2010-11-19 13:10:48
我会用th e的双重定义dot product来计算这一点,因为你跳过了垂直线发生什么的讨厌点,并处理象限
(请原谅我的记数法,因为数学在降价中效果不佳... )
凡A
和B
与x
和y
部件二维矢量,和theta
是它们之间的角度:
dot(A, B) = ax * bx + ay * by
和
dot(A, B) = |A| * |B| * cos(theta)
...其中|A|
是A
的长度,可与Pythagorean theorem计算:
|A| = sqrt(ax^2 + ay^2)
因此:
theta = acos((ax * bx + ay * by)/(|A| * |B|))
“,因为你跳过垂直线发生的问题”,或者,他可以简单地使用'Math.atan2'来为他处理这件事。 – aioobe 2010-11-19 13:22:14
- 1. 找到线与原点的角度
- 2. 找到与python文件中的关键字相关联的值
- 3. TensorFlow:NotFoundError:在检查点找不到关键
- 4. 将节点与SDN相关
- 5. 转换垫到关键点?
- 6. TextMate:如何找到与键盘快捷键相关的命令?
- 7. 与网格结构相关的点云?
- 8. 将3D对象捕捉到90度角,但围绕特定的关键点?
- 9. 关键点变形
- 10. Laravel 5.4与刀片中的关键点的搜索关系
- 11. 查找关键字包含点,并用@
- 12. 如何查找与坐标集相关的点?
- 13. Sitecore多站点Lucene搜索相关度
- 14. 从点到点以相同的角度移动?
- 15. 如何在neo4j中找到使用Neography的节点的相关节点?
- 16. i18n找到与cakephp相关的模型
- 17. 在PHP中,我如何找到与特定键相关的值
- 18. 获取关键焦点之前的clutter_actor关注焦点clutter_actor
- 19. 如何从2点找到角度?
- 20. 构建LINQ表达找到相关的树节点
- 21. Lucene与标点符号相关
- 22. 查找圆上的点的角度
- 23. 多个相关的字段角度2
- 24. SIFT与NCC和ZNCC的关系及其与Harris角点检测器的关系
- 25. 找不到关键的'痣'
- 26. Gremlin-Traversing查找与特定顶点无关的所有顶点
- 27. 与观点的关系
- 28. 在Linq to Umbraco中,有没有办法找到与节点相关的语言?
- 29. 找到相关的组
- 30. 使用服务相关亲和力方案查找相关服务的端点
在先进的感谢算法的工作非常出色,只是你提到的问题是因为Java计算在Y从屏幕的左上角开始,当向下移动时,y增加,如果我得到角度的绝对值,那么它是完美的。 非常感谢您的帮助。 – user435245 2010-11-19 13:25:24
嗯。尽管我不会在角度上使用Math.abs。然后'-45'和'+ 45'看起来一样。如果您想消除负角度,请尝试使用“+ 360”和“%360”。 – aioobe 2010-11-19 13:28:35