gpt4 book ai didi

java - 如何根据鼠标坐标(JavaFX)沿着围绕固定中心的圆形轨道定位节点?

转载 作者:行者123 更新时间:2023-12-01 17:41:00 25 4
gpt4 key购买 nike

我正在尝试进行一些基本的 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 的方法,该方法接受两个参数; yx。此方法为您执行此计算。

有关 Wikipedia: atan2 的更多信息

关于java - 如何根据鼠标坐标(JavaFX)沿着围绕固定中心的圆形轨道定位节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/267613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com