2016-10-30 3 views
0

hier zu schaffen, ist der Planet Klasse:Der Versuch, eine randomisierte "Sonnensystem"

public class Planet extends CelestialBody { 

private static Random r = new Random(); 
    private static Star star; 

    public Planet(Star star, int orbitRadius, int x, int y){ 
     name = "PLACEHOLDER"; 
     radius = Tools.intBetween(Settings.MAX_PLANET_SIZE, Settings.MIN_PLANET_SIZE); 
     color = Tools.rObjFromArray(Settings.PLANET_COLORS); 
     this.star = star; 
     this.orbitRadius = orbitRadius; 
     this.x = x; this.y = y; 
    } 


    public static Planet createNewPlanet(Star star, int orbitRadius){ 
     int px = (int) (star.x + orbitRadius * Math.cos(Math.toRadians(r.nextInt(360)))); 
     int py = (int) (star.y + orbitRadius * Math.sin(Math.toRadians(r.nextInt(360)))); 

     return new Planet(star, orbitRadius, px, py); 
    } 

    public void render(Graphics g){ 
     //Draw orbit 
     g.setColor(Color.white); 
     g.drawOval(star.x - orbitRadius, star.y - orbitRadius, orbitRadius * 2, orbitRadius * 2); 

     //Draw planet 
     g.setColor(color); 
     g.fillOval(x - radius, y - radius, radius * 2, radius * 2); 
    } 
} 

orbitRadius = distance from planet to star (random); 

radius = planet's radius (random) 

result

in den Kommentaren fragen, wenn Sie mehr Code benötigen, und ich weiß, Das ist eine noob-Frage, aber ich kann einfach nicht herausfinden, warum die Bahnen nicht mit den Planeten übereinstimmen. Vielen Dank.

+2

Willkommen bei StackOverflow! Ihr Code sieht auf den ersten Blick gut aus. Kannst du vielleicht den Rest der Planet-Klasse veröffentlichen? Wenn Sie es noch einfacher machen möchten, dass Menschen Ihnen helfen, können Sie versuchen, ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) zu erstellen. – 11684

+0

Egal, ich habe herausgefunden, was das Problem ist. – 11684

+0

Ich habe in der gesamten Klasse bearbeitet. – Tom

Antwort

2

Das Problem ist in den beiden folgenden Zeilen:

int px = (int) (star.x + orbitRadius * Math.cos(Math.toRadians(r.nextInt(360)))); 
int py = (int) (star.y + orbitRadius * Math.sin(Math.toRadians(r.nextInt(360)))); 

Weil Sie r.nextInt(360) zwei separate Zeiten nennen, erhalten Sie eine andere Zufallszahl jedes Mal.

Die Konsequenz ist, dass die X- und Y-Koordinaten für verschiedene Winkel sind, ich denke, es ist klar, warum dies ein Problem wäre.

Die Lösung ist sehr einfach: r.nextInt einmal aufrufen und speichern Sie das Ergebnis:

double randomAngle = Math.toRadians(r.nextInt(360)); 
int px = (int) (star.x + orbitRadius * Math.cos(randomAngle)); 
int py = (int) (star.y + orbitRadius * Math.sin(randomAngle)); 

Ich denke, das das Problem lösen sollte.

+0

Danke! Es ist so offensichtlich, aber ich konnte es einfach nicht herausfinden. – Tom

Verwandte Themen