Fibonacci 2
Heute haben wir die Löung der Fibonacci-Spirale in der Schule besprochen.
Naja man kann das ganze noch etwas einfacher und ehm optimierter machen, als meine Variante.
Dazu sollte man nur in der Mathe bei der Geometrie etwas aufgepasst haben. Verschiebung der Mittelpunktkordinate der Viertelkreise lässt sich wie folgt ausdücken:
- xneu = -y
- yneu = x
Weiter muss man noch einen Streckungsbetrag definieren. Dieser läst sich aus dem aktuellen Radius (Fibonaccizahl) minus dem letzten Radius berechnen:
- u = a - aPref
Damit die Kreissegmente in die richtige Richtung schauen, ziehen wir einfach noch bei jedem Zeichendurchgang 90 Grad vom Startwinkel ab.
Hier ist die Neue Variante:
Mein Code
import java.awt.*;
import java.applet.*;
public class FiboOpt extends Applet
{
public void init()
{
setBackground(Color.black);
setForeground(Color.cyan);
}
public void paint(Graphics g)
{
final int winkel = 90; // Winkel des Kreises
final int scale = 10; // Vergoesserung
final int anzahl = 8; // Anzahl Elemente
int a = 1; // Anfang der FiboFolge;
Dimension wnd = getSize();
int xm = wnd.width / 2; // 1. Mittelpunkt
int ym = wnd.height / 2;
int u = 0; // Verschiebungstrecke
int vx = 0, vy = 1; // Verschiebungsrichtung
int startwinkel = 0;
int aPref = 1;
int tmp;
//Achsen
g.setColor(Color.red);
g.drawLine(0,ym - scale,wnd.width,ym - scale);
g.drawLine(xm,0,xm,wnd.height);
g.setColor(Color.cyan);
for(int i = 0;i <= anzahl;i++)
{
g.drawArc(xm - (a * scale),ym - (a * scale),2 * a * scale,2 * a * scale,startwinkel,winkel);
tmp = a;
a += aPref;
aPref = tmp;
u = a - aPref;
startwinkel -= 90;
tmp = vx;
vx = -vy;
vy = tmp;
xm += vx * u * scale;
ym += vy * u * scale;
}
}
}