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之间,但我得到了一些奇怪的答案.当两个点位于通过中心点绘制的水平线的上方和下方时,会出现奇怪的结果.
但老实说我已经尝试了很多东西,现在我的头疼了!它不一定是计算速度快的解决方案,因为它只执行一次.提前致谢.
答案是通过标志给你的(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).