在 Java 的圆形路径上移动对象
Moving an Object on a circular path in Java
我想制作一个类似太阳系的模拟器,因此我想围绕太阳移动一颗行星。
绘图部分搞定了,但是绕太阳做圆周运动的部分不知道怎么弄
谢谢。
假设你有太阳的坐标和所需的半径,比如
double sunX = ...
double sunY = ...
double radius = ...
和某种游戏时间,我们用它来确定当前位置以及某种速度:
int time = ...
假设时间增加每毫秒一次。行星应该从 0°
开始运动并在 2
秒(2000
毫秒)后再次到达 360°
(从 0
到 2 * PI
),那么当前角度可以由
确定
double orbitalPeriod = 2000.0;
double portion = (time % orbitalPeriod) / orbitalPeriod; // [0, 1)
double angle = portion * 2 * Math.PI; // [0, 2 * PI)
我们现在可以使用所需的 角度 和 半径.
轻松计算行星的坐标
double planetX = sunX + radius * Math.cos(angle);
double planetY = sunY + radius * Math.sin(angle);
您可以在 Wikipedia 上阅读有关公式的更多信息。下图可能有助于理解等式:
我想制作一个类似太阳系的模拟器,因此我想围绕太阳移动一颗行星。 绘图部分搞定了,但是绕太阳做圆周运动的部分不知道怎么弄
谢谢。
假设你有太阳的坐标和所需的半径,比如
double sunX = ...
double sunY = ...
double radius = ...
和某种游戏时间,我们用它来确定当前位置以及某种速度:
int time = ...
假设时间增加每毫秒一次。行星应该从 0°
开始运动并在 2
秒(2000
毫秒)后再次到达 360°
(从 0
到 2 * PI
),那么当前角度可以由
double orbitalPeriod = 2000.0;
double portion = (time % orbitalPeriod) / orbitalPeriod; // [0, 1)
double angle = portion * 2 * Math.PI; // [0, 2 * PI)
我们现在可以使用所需的 角度 和 半径.
轻松计算行星的坐标double planetX = sunX + radius * Math.cos(angle);
double planetY = sunY + radius * Math.sin(angle);
您可以在 Wikipedia 上阅读有关公式的更多信息。下图可能有助于理解等式: