2015-11-12 19 views
5
import java.io.*; 
import java.awt.*; 

// Logarithmic spiral example 
public class Spiral extends Frame 
{// The spiral consists of n line segments. Line segment 1 
// has starting point (hc, vc). Line segment k, for 1<=k<=n, 
// has length k*d. Each line segment makes an angle of turn 
// degrees with the previous line segment. The colors of the 
// lines alternate between red, blue, and green. 

final static int hc= 500; // Center of spiral is (hc,vc) 
final static int vc= 350; 
final static int n= 2; // Number of sides to draw 
final static int turn= 45; // The turn factor 
final static double d= 1; // Length of leg k is k*d 

public void paint(Graphics g) 
    {int h= hc; 
    int v= vc; 
    int k= 1; 
    //Invariant: legs 1..k-1 have been drawn, and leg k is 
    //   to be drawn with start point (hc,vc) 
    while (k<=n) 
     {//Draw line k 
      if (k%3==0) g.setColor(Color.red); 
      if (k%3==1) g.setColor(Color.blue); 
      if (k%3==2) g.setColor(Color.green); 

      int theta= k*turn %360; 
      double L= k*d; 
      // Calculate the end point (h_next,v_next) of 
      // the line 
       int h_next= (int) Math.round(
         h+L*Math.cos(theta*Math.PI/180)); 
       int v_next= (int) Math.round(
         v+L*Math.sin(theta*Math.PI/180)); 
      g.drawLine(h,v,h_next, v_next); 

     h= h_next; v= v_next; 
     k= k+1; 
     } 
    } 

} 

public class spiralMain { 

public static void main(String args[]) { 
      Spiral d = new Spiral(); 
    d.resize(10,10); 
    d.move(0,50); 
    d.setTitle("Logarithmic spiral"); 
    d.show(); 
    d.toFront(); 
    } 
} 

Ich versuche eine logarithmische Spirale mit Liniensegmenten zu erstellen. Wenn ich den Code zu kompilieren bekomme ich diese:Erstellen einer logarithmischen Spirale in Java

actual

Aber ich versuche etwas mit viel weniger Linien zu erhalten. Es soll wie folgt aussehen:

expected

Ich bin nicht sicher, was ich soll die Werte zu, um sie zu diesem Punkt zu gelangen ändern.

+3

Ihr Ergebnis hat eine psychedelische Wirkung. Wenn du lange genug darauf starrst, beginnst du zu sehen, wie sich die Linien bewegen, und dann erzeugt es schließlich Halluzinationen und du kannst dir jede Form vorstellen, die du willst. Also, was ist das Problem? ;-) –

+1

Code-Snippets sind für Javascript. –

+1

Ich habe eine Reihe von zufälligen Dingen (vor allem Code-Stil, der für die Klarheit sehr wichtig ist) in Ihrer Frage behoben. Ich hoffe, Sie finden die Änderungen positiv. –

Antwort

10

Wenn ich mich richtig erinnere, sollten Sie d auf die golden ratio:

/** 
* Length of leg k is k * D 
*/ 
private final static double D = 1.618; 
+2

Danke. Ich änderte diese d auf 1,618 und N auf 45 und das schien den Trick getan zu haben. – Aizzle

+0

@Azzle sollten Sie diese Antwort auch upvote. Gib so viel wie möglich an diejenigen, die helfen :) –