2015-11-12 3 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

Если я правильно помню, вы должны установить d на golden ratio:

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

Спасибо. Я изменил эти d на 1.618 и N до 45, и это, казалось, сделало трюк. – Aizzle

+0

@ Удивительно, что вы должны также перенести этот ответ. Дайте как можно больше тем, кто помогает :) –

Смежные вопросы