我正在尝试进行一些基本的 JavaFX 游戏开发,但我对一些圆形数学感到困惑。
我在 (x:250, y:250) 处有一个半径为 50 的圆。
我的目标是根据鼠标的位置制作一个较小的圆,并将其放置在上述圆的圆周上。
我感到困惑的是坐标空间和它背后的三角函数。
我的问题来自于屏幕上的 X/Y 空间不以 0,0 为中心。但屏幕左上角是 0,0,右下角是 500,500。
我的计算是:
var xpos:Number = mouseEvent.getX();
var ypos:Number = mouseEvent.getY();
var center_pos_x:Number = 250;
var center_pos_y:Number = 250;
var length = ypos - center_pos_y;
var height = xpos - center_pos_x;
var angle_deg = Math.toDegrees(Math.atan(height / length));
var angle_rad = Math.toRadians(angle_deg);
var radius = 50;
moving_circ_xpos = (radius * Math.cos(angle_rad)) + center_pos_x;
moving_circ_ypos = (radius * Math.sin(angle_rad)) + center_pos_y;
我让应用程序打印出我移动鼠标时计算出的角度 (angle_deg),输出如下:
当鼠标处于(逆时针移动的度数)时:
- 在圆的正上方,与圆心水平对齐,角度为 -0
- 向左垂直居中,角度为-90
- 在圆的正下方,与圆心水平对齐,角度为 0
- 向右垂直居中,角度为 90
那么,我该怎么做才能使其变为 0、90、180、270?
我知道它一定是小东西,但我就是想不起来它是什么......
感谢您的帮助 (不,这不是作业)
最佳答案
atan(height/length)
不足以获取角度。您需要补偿每个象限,以及“被零除”的可能性。大多数编程语言库都提供一个名为 atan2
的方法,该方法接受两个参数; y
和 x
。此方法为您执行此计算。
有关 Wikipedia: atan2 的更多信息
关于java - 如何根据鼠标坐标(JavaFX)沿着围绕固定中心的圆形轨道定位节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267613/