3

我在这里看到了类似的问题,但无法让数学工作。

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

如果我站在 cx,cy 并看着点 x1,y1 我怎么知道我需要转向哪条路来面对 x2,y2?

到目前为止,我正在计算每个点的角度

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

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

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

4

2 回答 2

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)

于 2013-11-14T21:46:36.000 回答
0

假设A1是向量 from (cx, cy)to(x1, y1)和水平轴之间的角度,并且A2是向量 from (cx, cy)to(x2, y2)和水平轴之间的角度。当你坐下(cx, cy)来看这个点时,当且仅当两个向量之间的夹角小于时(x1, y1),点在你的右边,当且仅当夹角大于时,点在你的左边。(x2, y2)pipi

由于正角的正弦从 to 为正,从to0pi负,因此该点在您的右侧 iff和左侧 iff 上。pi2*pisin(A2-A1) > 0sin(A2-A1) < 0

如果我们使用通常的三角恒等式,我们有

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

然后,您只需用笛卡尔坐标的公式替换正弦和余弦即可。分母被分解,因为这些点位于一个圆上。

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

于 2013-11-14T22:05:35.117 回答