2017-02-06 4 views
1
public static void drawSpiral(Display panel) { 
    int centerX = panel.getWidth()/2; 
    int centerY = panel.getHeight()/2; 

    double degAng = 270; 
    double radius = 150; 
    double x, y, radAng; 
    while (true) { 

     radAng = (degAng * Math.PI)/180; 
     x = centerX + radius * Math.cos (radAng); 
     y = centerY + radius * Math.sin (radAng); 

     panel.drawNextPoint ((int) x, (int) y); 
     degAng += 0.45; 
    } 
} 

Ich versuche, eine Methode zu erstellen, die eine einfache GUI verwendet, die zeichnet. Die Methode, wie sie oben ist, zeichnet die Koordinaten eines einfachen Kreises mit dem Radius 150 beginnend von oben. Ich versuche einen Kreis zu zeichnen, der den Punkt dieser Methode als Mittelpunkt benutzt.Wie finde ich die Koordinaten des Umfangs eines Kreises, der sich um den Umfang eines anderen Kreises dreht?

Das habe ich zuletzt ausprobiert und es gibt mir nur eine Ellipse!

public static void drawCircle(Display panel) { 
    int centerX = panel.getWidth()/2; 
    int centerY = panel.getHeight()/2; 

    double degAng = 270; 
    double newDegAng = 0; 
    double newRadius = 25; 
    double radius = 150; 
    double x, y, radAng, newX, newY, newRadAng; 
    while (true) { 

     radAng = (degAng * Math.PI)/180; 
     x = centerX + radius * Math.cos (radAng); 
     y = centerY + radius * Math.sin (radAng); 

     newRadAng = (newDegAng * Math.PI)/180; 
     newX = x - newRadius * Math.cos (newRadAng); 
     newY = y - newRadius * Math.sin (newRadAng); 

     panel.drawNextPoint ((int) newX, (int) newY); 
     degAng += 0.45; 
     newDegAng -= 0.45; 
    } 
} 

Antwort

1

Sie müssen Ihren Kreis zur Erschöpfung führen, bevor Sie zum nächsten Punkt kommen. So müssen Sie eine verschachtelte Schleife:

double degAng = 0; 
double newDegAng = 0; 
double newRadius = 25; 
double radius = 150; 
double x, y, radAng, newX, newY, newRadAng; 
while (degAng<360) { 
    radAng = (degAng * Math.PI)/180; 
    x = centerX + radius * Math.cos (radAng); 
    y = centerY + radius * Math.sin (radAng); 

    newDegAng = 0; 
    while (newDegAng>-360) { 
     newRadAng = (newDegAng * Math.PI)/180; 
     newX = x - newRadius * Math.cos (newRadAng); 
     newY = y - newRadius * Math.sin (newRadAng); 
     drawPoint ((int) newX, (int) newY); 
     newDegAng -= 0.45; 
    } 

    drawPoint((int) x, (int) y); 
    degAng += 0.45; 
} 

Dies schafft ein schönes Bild wie dieses

enter image description here

Dies zieht alle Kreise, so dass es effektiv eine Röhre erzeugt.

Verwandte Themen