2015-11-12 14 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(); 
    } 
} 

私は線分を使って対数螺線を作成しようとしています。Javaで対数スパイラルを作成する

actual

しかし、私ははるかに少ない線で何かを取得しようとしている:私は、コードをコンパイルするとき、私はこれを取得します。私はそのポイントにそれを得るためにに値を変更すべきかわからないんだけど

expected

:それは次のようになります。

+3

あなたの結果はサイケデリックな効果を持っています。あなたがそれを十分に見ていると、線の動きが見え始め、ついには幻覚が現れ、あなたが望むどんな形も想像することができます。だから問題は何ですか? ;-) –

+1

コードスニペットはJavascript用です。 –

+1

あなたの質問には、ランダムなもの(主に、コードのスタイルが非常に重要です)が固定されていました。あなたは変化がポジティブであることを願っています。 –

答えて

10

私の記憶が正しければ、あなたはgolden ratioにDを設定する必要があります。

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

ありがとうございます。私はこれらのdを1.618に変更し、Nを45に変更しました。 – Aizzle

+0

@Aizzleあなたもこの回答をupvoteする必要があります。できるだけ多くの人を助ける人に与える: –

関連する問題