# Spirale



## Neondream (24. Jan 2010)

so muss in meiner aufgabe eine Spirale ausgeben lassen

meine erste idee war diese hier:


```
StdDraw.line(0.5, 0.5, 0.55, 0.5);   
		StdDraw.line(0.55, 0.5, 0.55, 0.55);  
		StdDraw.line(0.55, 0.55, 0.45, 0.55);
		StdDraw.line(0.45, 0.55, 0.45, 0.45);
		StdDraw.line(0.45, 0.45, 0.6, 0.45);
		StdDraw.line(0.6, 0.45, 0.6, 0.6);
		StdDraw.line(0.6, 0.6, 0.4, 0.6);
		StdDraw.line(0.4, 0.6, 0.4, 0.4);
		StdDraw.line(0.4, 0.4, 0.65, 0.4);
		StdDraw.line(0.65, 0.4, 0.65, 0.65);
```
usw.....

wollte diese idee dann weiter führen um sie zu verallgemeinern.... aber irgendwie klappt dann gar nix mehr und das system streikt :shock:


```
x1,x2,y1,y2 = 0.5

                        x2+=0.5;
			StdDraw.line(x1, y1, x2, y2);   
			x1=x2;
			y2+=0.5;
			StdDraw.line(x1, y1, x2, y2);  
			y1=y2;
			x2-=0.5;
			StdDraw.line(x1, y1, x2, y2);  
			y2-=0.5;
			StdDraw.line(x1, y1, x2, y2);  
			y2=y1;
			x2+=0.1;
			StdDraw.line(x1, y1, x2, y2);   
			x1=x2;
			y2+=0.1;
			StdDraw.line(x1, y1, x2, y2);  
			y1=y2;
			x2-=0.1;
			StdDraw.line(x1, y1, x2, y2);  
			y2-=0.1;
			StdDraw.line(x1, y1, x2, y2);  
			y2=y1;
			x2+=1.5;
			StdDraw.line(x1, y1, x2, y2);   
			x1=x2;
			y2+=1.5;
			StdDraw.line(x1, y1, x2, y2);  
			y1=y2;
			x2-=1.5;
			StdDraw.line(x1, y1, x2, y2);  
			y2-=1.5;
			StdDraw.line(x1, y1, x2, y2);  
			y2=y1;
```
usw....

so 1st weiß irgendjmnd. wieso er mir in der 2 variante nichts ausspuckt ist ja das selbe prinzip wie bei variante 2

2nd versuche ich erfolgslos eine for schleife zu basteln was ich nicht hinbekomme da ja abwechselnd die werte + und  - genommen werden müssen und dann wieder angeglichen....

wäre echt super wenn mir da jmnd helfen könnte
die lösung ist ebstimmt super einfach aber ich kriege es iwie gerade absolut nicht auf die reihe 

nicegreetz & thx
neon


----------



## Lirave (24. Jan 2010)

müsste da nicht immer +0.05 addiert werden anstatt 0.5 ?

muss es so eine "Spirale" werden ?






oder eine runde ?


wenn ja kann das hier klappen (ungetestet)


```
int n = 100; //schritte
		 double xa,ya = 0;	//startpunkt der Spirale
		 double a = 0.05; 	// schrittweite der Spirale
		 int i,j = 1;
		 for (int z=0;z<n;z++){
			 if ( z % 2 == 0){
				 StdDraw.line(xa, ya, xa, ya+i*a*Math.pow(-1, i+1));
				 ya += +i*a*Math.pow(-1, i+1); 	// aktuellen Punkt aktualisieren
				 i++;
				  
			 }else{
				 StdDraw.line(xa, ya, xa+j*a*Math.pow(-1, j+1), ya);
				 xa += +j*a*Math.pow(-1, j+1); 	// aktuellen Punkt aktualisieren
				 j++;
			 }
		 }
```


----------



## akaimpc (24. Jan 2010)

Ich bin mir ziemlich sicher, dass es sich um eine "quadratische Spirale", wie gezeichnet, handelt, sitze gerade auch noch an der Aufgabe, Inspirationen wären nicht schlecht


----------



## LoR (24. Jan 2010)

Wie würdest du denn einen Kreis zeichnen (ohne Graphics#drawCircle)? Wenn du das gelöst und verstanden hast, dann wirst du sehen das die Spirale kein Problem mehr darstellt .

//Edit
Mein  Post war zu langsam. Quadratisch ist ein wenig anders.

//Edit 2
In diesem Fall würde die Frage lauten, wie du ein Quadrat zeichnen würdest?


----------



## Neondream (25. Jan 2010)

@  Lirave

super idee :applaus:

hab das ganze kurz überarbeitet jetzt kommt die gesuchte spirale bei raus:


```
public class test 
{

	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{
		// TODO Auto-generated method stub

        int n = Integer.parseInt(args[0]); //schritte
        double xa = 0.5;
        double ya = 0.5;//startpunkt der Spirale
        double a = 0.005;   // schrittweite der Spirale
        int i = 1;
        int j = 0;
        for (int z=0;z<n;z++){
            if ( z % 2 == 0){
                StdDraw.line(xa, ya, xa, ya+i*a*Math.pow(-1, i+1));
                ya += +i*a*Math.pow(-1, i+1);  // aktuellen Punkt aktualisieren
                i++;
                 
            }else{
                StdDraw.line(xa, ya, xa+j*a*Math.pow(-1, j+1), ya);
                xa += +j*a*Math.pow(-1, j+1);  // aktuellen Punkt aktualisieren
                j++;
            }
        }

	}
}
```
(args[500])

Danke :toll:


----------



## Lirave (25. Jan 2010)

np, aber wenn du j = 0 setzt, dann gibt es am Anfang (also in der Mitte) einen Fehler, besser wäre es wenn du willst, dass sich die Schleife in eine andere Richtung dreht, an der Potenz zu drehen.


----------

