ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 如何判断某个点是否是另一个点的左侧或右侧

2019-08-31 10:02:18  阅读:213  来源: 互联网

标签:angle java math trigonometry


我在这里看到过类似的问题,但是无法让数学运算起来.

我有一个圆,圆周上有两个已知点(x1,y1,x2,y2),圆心为cx,cy

如果我站在cx,cy并且看着点x1,y1我怎么能告诉我需要转向哪个方向面对x2,y2?

到目前为止,我正在研究每个角度的角度

阿坦((cx-x1)/(cy-y1))
阿坦((cx-x2)/(cy-y2))

然后我尝试了一个简单的减法,使用mod来确保它们都在-2pi和2pi之间,但我得到了一些奇怪的答案.当两个点位于通过中心点绘制的水平线的上方和下方时,会出现奇怪的结果.

但老实说我已经尝试了很多东西,现在我的头疼了!它不一定是计算速度快的解决方案,因为它只执行一次.提前致谢.

解决方法:

答案是通过(x1-cx)(y2-cy) – (y1-cy)(x2-cx)的符号给出的.

证明:

设A是从C到(x1,y1)的方向,表示为从X轴逆时针测量的角度; B是从C到(x2,y2)的方向,用同样的方式表示;并且r是圆的半径.然后(x2,y2)在(x1,y1)的右边,如从C看到的,如果AB位于0和pi之间或-2pi和-pi之间(即,如果sin(AB)是正的),并且如果AB位于-pi和0之间或者pi和2pi之间(即,如果sin(AB)是负的),则向左移动.

现在,

(x1,y1)=(Cx + r cos A, Cy + r sin A) 
(x2,y2)=(Cx + r cos B, Cy + r sin B)

所以

  (x1-Cx)(y2-Cy) - (y1-Cy)(x2-Cy) 
= (r cos A)(r sin B) - (r sin A)(r cos B)    
= - r^2 (sin A cos B - cos A sin B)
= - r^2 (sin (A-B))

与罪(A-B)符号相反.

标签:angle,java,math,trigonometry
来源: https://codeday.me/bug/20190831/1774966.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有