java – 如何判断某个点是否是另一个点的左侧或右侧
作者:互联网
我在这里看到过类似的问题,但是无法让数学运算起来.
我有一个圆,圆周上有两个已知点(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