fb:porticula NoPaste
Fraktale Schneeflocke
Uploader: | nemored |
Datum/Zeit: | 06.12.2008 13:21:03 |
' Rekursive Schneeflocke
' Eine Strecke wird von einer anderen geteilt und die vier Teilstrecken weiterbearbeitet.
' getestet unter fbc 0.18.3
const TIEFE as ubyte= 9, PI as double = acos(-1)
declare sub flocke(startx as short, starty as short, endex as short, endey as short, _
laenge as byte = 80, teilung as byte = 50, winkel as short = 90, stufe as ubyte = TIEFE)
screenres 500, 500
randomize timer
flocke 250, 50, 250, 450, 80, 50, 70
getkey
sub flocke(startx as short, starty as short, endex as short, endey as short, _
laenge as byte = 90, teilung as byte = 50, winkel as short = 90, stufe as ubyte = 0)
' Grundlinie von (startx/starty) nach (endex/endey)
' Sie wird nach (teilung)% von einer neuen Strecke im Winkel (winkel)° geschnitten; diese ist (laenge) lang.
' (stufe) gibt die Verschachtelungstiefe an.
line(startx, starty)-(endex, endey)
if stufe = 0 then exit sub
' neuen Mittelpunkt und Winkel suchen
dim as short mittex, mittey
mittex = startx + (endex-startx)*teilung/100 : mittey = starty + (endey-starty)*teilung\100
dim as double neuwinkel = atan2(endey-starty, endex-startx) + winkel*PI/180
dim as single lang = sqr((endex-startx)^2 + (endey-starty)^2)
dim as short neustartx, neustarty, neuendex, neuendey
neustartx = mittex - cos(neuwinkel)*lang*laenge/200
neustarty = mittey - sin(neuwinkel)*lang*laenge/200
neuendex = mittex + cos(neuwinkel)*lang*laenge/200
neuendey = mittey + sin(neuwinkel)*lang*laenge/200
' neue Flocke zeichnen
flocke(neustartx, neustarty, mittex, mittey, laenge, teilung, winkel, stufe-1)
flocke(mittex, mittey, neuendex, neuendey, laenge, teilung, winkel, stufe-1)
flocke(startx, starty, mittex, mittey, laenge, teilung, winkel, stufe-1)
flocke(mittex, mittey, endex, endey, laenge, teilung, winkel, stufe-1)
end sub