我在这里看过类似的问题,但是无法让数学运算起来。
我有一个圆圈,圆周上有两个已知点(x1,y1,x2,y2),圆心为cx,cy
如果我站在cx,cy并且看着点x1,y1我怎么能告诉我需要转向哪个方向面对x2,y2?
到目前为止,我正在研究每个点的角度
Atan((cx-x1)/(cy-y1)) 阿坦((cx-x2)/(cy-y2))
然后我尝试了一个简单的减法,使用mod来确保它们都在-2pi和2pi之间,但我得到了一些奇怪的答案。当两个点位于通过中心点绘制的水平线的上方和下方时,会出现奇怪的结果。
但是说实话,我已经尝试了很多东西,现在我的头疼了!它不一定是计算速度快的解决方案,因为它只执行一次。提前谢谢。
答案 0 :(得分: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)
符号相反。
答案 1 :(得分:0)
假设A1
是(cx, cy)
到(x1, y1)
的向量与水平轴之间的角度,A2
是来自{{1}的向量之间的角度} (cx, cy)
和水平轴。当您坐在(x2, y2)
处并查看(cx, cy)
点时,点(x1, y1)
位于您的右侧,当且仅当两个矢量之间的角度小于(x2, y2)
且当且仅当角度大于pi
时才在左侧。
由于正角度的正弦从pi
到0
为正,而pi
为负pi
,因此该点位于右侧iff 2*pi
和左侧iff sin(A2-A1) > 0
。
如果我们使用通常的trigonometric identity,我们就有了
sin(A2-A1) < 0
然后你只需用笛卡尔坐标用公式替换正弦和余弦。因为这些点位于一个圆上,所以分母被考虑在内。
因此sin(A2-A1) = sin(A2) * cos(A1) - sin(A1) * cos(A2)
的符号与sin(A2-A1)
的符号相同。