Buchempfehlung
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Mikrocomputertechnik mit Controllern der Atmel AVR-RISC-Familie
Umfassend, aber leicht verständlich führt dieses Buch in die Programmierung von ATMEL AVR Mikrocontrollern ein. [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

Fraktale Schneeflocke

Uploader:Redakteurnemored
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