Как исправить эту модель Солнечной системы при обработке? - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь построить модель Солнечной системы (только с Землей, Солнцем и Луной) при обработке (версия 3.4), используя режим Java.Я новичок в обработке, и я использовал только Java в этом контексте (следовательно, я также новичок в Java).

У меня есть кое-что, что частично работает: enter image description here

Это мой код.Первая вкладка:

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);

Как это исправить?

Спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Это ошибка:

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);
...