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;
        }
    }
}