如何修复这个太阳系模型的处理?
How to fix this Solar System model on processing?
我正在尝试使用 Java 模式在 Processing(3.4 版)上构建一个太阳系模型(仅包含地球、太阳和月球)。我是处理新手,我只在这种情况下使用过 Java(因此,我也是 Java 的新手)。
我有一些东西可以部分工作:
这是我的代码。第一个标签:
Planet sun;
void setup() {
size(900, 1200);
sun = new Planet(100, 10, 0);
sun.spawnMoons(1,2);
}
void draw() {
background(0);
translate(750, 900/2);
sun.show();
sun.orbit();
}
第二个标签:
class Planet {
float radius;
float distance;
Planet[] planets;
float angle;
float orbitspeed;
Planet(float r, float d, float o) {
radius = r;
distance = 400;
angle = PI;
orbitspeed = o;
}
void orbit() {
angle = angle + orbitspeed;
if (planets != null) {
for (int i = 0; i < planets.length; i++) {
planets[i].orbit();
}
}
}
void spawnMoons(int total, int level) {
planets = new Planet[total];
for (int i = 0; i < planets.length; i++) {
float r = radius/(level*2);
float d = distance/(level*4);
float o = 0.01;
planets[i] = new Planet(r, d/(level*8), o);
if (level < 3) {
int num = 2;
planets[i].spawnMoons(num, level+1);
}
}
}
void show() {
pushMatrix();
fill(255, 100);
rotate(angle);
translate(distance, 0);
ellipse(0, 0, radius*2, radius*2);
if (planets != null) {
for (int i = 0; i < planets.length; i++) {
planets[i].show();
}
}
popMatrix();
}
}
但是,我的“月球”离我的“地球”太远了。我正在尝试修复它,但我做不到。考虑到我构建它的方式,如果我更改第 11 行(第二个选项卡)的值,它不会解决问题:
distance = 10;
考虑到我建造它的方式,地球与太阳之间的距离与地球与月球之间的距离相同。
我能够使每个物体的半径彼此成比例。尽管如此,我没有对它们之间的距离做同样的事情。下面的线应该保持距离的比例但它失败了:
float d = distance/(level*4);
我该如何解决这个问题?
谢谢。
这是错误:
Planet(float r, float d, float o) {
radius = r;
distance = 400; //<== here
angle = PI;
orbitspeed = o;
}
在构造函数中,每个新行星的距离设置为 400,因此 spawnMoons() 中的逻辑什么都不做。
如果您应用以下更改,它将按您的意愿工作,您可以开始调整 ;)
//in setup()
sun = new Planet(100, 400, 0);
//in the planet constructor
distance = d;
//in spawnMoons()
float d = distance/level;
planets[i] = new Planet(r, d, o);
我正在尝试使用 Java 模式在 Processing(3.4 版)上构建一个太阳系模型(仅包含地球、太阳和月球)。我是处理新手,我只在这种情况下使用过 Java(因此,我也是 Java 的新手)。
我有一些东西可以部分工作:
这是我的代码。第一个标签:
Planet sun;
void setup() {
size(900, 1200);
sun = new Planet(100, 10, 0);
sun.spawnMoons(1,2);
}
void draw() {
background(0);
translate(750, 900/2);
sun.show();
sun.orbit();
}
第二个标签:
class Planet {
float radius;
float distance;
Planet[] planets;
float angle;
float orbitspeed;
Planet(float r, float d, float o) {
radius = r;
distance = 400;
angle = PI;
orbitspeed = o;
}
void orbit() {
angle = angle + orbitspeed;
if (planets != null) {
for (int i = 0; i < planets.length; i++) {
planets[i].orbit();
}
}
}
void spawnMoons(int total, int level) {
planets = new Planet[total];
for (int i = 0; i < planets.length; i++) {
float r = radius/(level*2);
float d = distance/(level*4);
float o = 0.01;
planets[i] = new Planet(r, d/(level*8), o);
if (level < 3) {
int num = 2;
planets[i].spawnMoons(num, level+1);
}
}
}
void show() {
pushMatrix();
fill(255, 100);
rotate(angle);
translate(distance, 0);
ellipse(0, 0, radius*2, radius*2);
if (planets != null) {
for (int i = 0; i < planets.length; i++) {
planets[i].show();
}
}
popMatrix();
}
}
但是,我的“月球”离我的“地球”太远了。我正在尝试修复它,但我做不到。考虑到我构建它的方式,如果我更改第 11 行(第二个选项卡)的值,它不会解决问题:
distance = 10;
考虑到我建造它的方式,地球与太阳之间的距离与地球与月球之间的距离相同。
我能够使每个物体的半径彼此成比例。尽管如此,我没有对它们之间的距离做同样的事情。下面的线应该保持距离的比例但它失败了:
float d = distance/(level*4);
我该如何解决这个问题?
谢谢。
这是错误:
Planet(float r, float d, float o) {
radius = r;
distance = 400; //<== here
angle = PI;
orbitspeed = o;
}
在构造函数中,每个新行星的距离设置为 400,因此 spawnMoons() 中的逻辑什么都不做。
如果您应用以下更改,它将按您的意愿工作,您可以开始调整 ;)
//in setup()
sun = new Planet(100, 400, 0);
//in the planet constructor
distance = d;
//in spawnMoons()
float d = distance/level;
planets[i] = new Planet(r, d, o);