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

use*_*997 3 java math trigonometry angle

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

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

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

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

Atan((cx-x1)/(cy-y1))Atan((cx-x2)/(cy-y2))

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

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

Daw*_*ica 5

答案是通过标志给你的(x1-cx)(y2-cy) - (y1-cy)(x2-cx).

证明:

A是从方向C(x1,y1),表示为从X轴的角度测量逆时针; B从成为方向C(x2,y2),表示了同样的方式; 并且r是圆的半径.然后(x2,y2)(x1,y1)从C看到的,如果A-B位于0和pi之间或介于-2pi和-pi之间(即,如果sin(A-B)是正数),则A-B位于-pi和0之间或介于pi和2pi之间的左侧(即,如果sin(A-B)是否定的).

现在,

(x1,y1)=(Cx + r cos A, Cy + r sin A) 
(x2,y2)=(Cx + r cos B, Cy + r sin B)
Run Code Online (Sandbox Code Playgroud)

所以

  (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))
Run Code Online (Sandbox Code Playgroud)

与...有相反的标志sin (A-B).