2013-11-14 67 views
2

我在这里看到过类似的问题,但无法使数学运作。如何判断一个点是左边还是右边的另一点

我有一个圆圈,用圆作为CX中心圆周上的两个已知点(X1,Y1,X2,Y2),CY

如果我站在CX,CY,看着点x1,y1我怎么知道我需要转向哪个方向来面对x2,y2?

到目前为止我的角度制定出每个点

ATAN((CX-X1)/(CY-Y1)) ATAN((CX-X2)/(CY-Y2))

我已经尝试了一个简单的减法,使用mod来确保两者都在-2pi和2pi之间,但我只是得到一些奇怪的答案。当两点位于通过中心点的水平线上下时,会出现奇怪的结果。

但生病说实话我已经尝试了很多东西,现在我的头痛!它不必是一个计算快速的解决方案,因为它只能执行一次。提前致谢。

+1

检查http://stackoverflow.com/questions/1560492/how-to-tell-whether-a-point-is-to-the-right-or-left-of-a-line?rq=1 – higuaro

回答

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) 

所以

(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)) 

具有符号相反sin (A-B)

+0

但是如何?我希望看到一些解释。 – slider

+0

你的意思是,它为什么有效?恩,好吧,也许以后如果我有时间的话,我会编辑这个答案来包含一个长长的解释。 –

+0

是的它是如何工作的?标志确定的是左边还是右边?我会等待解释。 – slider

0

假设A1是从(cx, cy)(x1, y1)矢量和水平轴之间的角度,并且是A2(cx, cy)(x2, y2)载体和水平轴之间的角度。当您坐在(cx, cy)并查看点(x1, y1)时,当且仅当两个向量之间的角度小于pi并且在左侧当且仅当角度大于pi时,点(x2, y2)在您的右侧。

由于正角的正弦值是正从0pi和消极从pi2*pi,那么它遵循的一点就是在你的右边IFF sin(A2-A1) > 0,并在你的左边当且仅当sin(A2-A1) < 0

如果我们用平时trigonometric identity,我们有

sin(A2-A1) = sin(A2) * cos(A1) - sin(A1) * cos(A2) 

然后你只需通过自己的配方与直角坐标系来代替正弦和余弦。因为分数坐在一个圆上,因此分母被排除。

因此sin(A2-A1)的符号与(x2-cx)*(y1-cy) - (x1-cx)*(y2-cy)的符号相同。

相关问题