Drachenfraktal
Übersicht

![]() |
TimBoBetreff: Drachenfraktal |
![]() Antworten mit Zitat ![]() |
---|---|---|
Heyho,
wofür man das benutzen, kann weiß ich nicht, aber ich Präsentiere hier stolz mein programmiertes Drachenfraktal. ![]() Die Include Datei Code: [AUSKLAPPEN] ;globals find_midpoints() Global midx,midy ;Types Type Linie Field x Field y Field x2 Field y2 Field status End Type Function find_midpoint(x1,y1,x2,y2,richtung) If i=handle_l Then winkel=(ATan2(y2-y1,x2-x1)+360) Mod 360 laenge=Sqr( (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) ) x=x1+Cos(winkel)*laenge/2 y=y1+Sin(winkel)*laenge/2 winkel=winkel+richtung*90 midx=x+Cos(winkel)*laenge/2 midy=y+Sin(winkel)*laenge/2 EndIf i=i+1 End Function Function createfraktal(searchdeph,modi) richtung=-1 While now<=searchdeph now=now+1 ;status 0=wird berechnet . 1=wird gelöscht . 2=wird später berechnet For l.linie=Each Linie ;fraktal wird erweitert If l\status=0 find_midpoint(l\x,l\y,l\x2,l\y2,richtung) If modi=1 Then Select richtung Case 1 richtung=-1 Case -1 richtung=1 End Select EndIf ;^returns ;midx ;midy x=l\x y=l\y xx=l\x2 yy=l\y2 l\status=1 xl.linie=New Linie xl\x=x xl\y=y xl\x2=midx xl\y2=midy xl\status=2 xl.linie=New Linie xl\x=midx xl\y=midy xl\x2=xx xl\y2=yy xl\status=2 EndIf If l\status=1 Then Delete l.linie Next For l.linie=Each Linie If l\status=2 Then l\status=0 EndIf Next Wend End Function Function renderfraktal() lockbuffer backbuffer() For l.linie=Each Linie Line l\x,l\y,l\x2,l\y2 Next unlockbuffer backbuffer() End Function Function anzahl_linien() For l.linie=Each Linie a=a+1 Next Return a End Function Function delete_lines() For l.Linie=Each Linie Delete l.linie Next End Function Function fraktal_coords(x1,y1,x2,y2) l.linie=New Linie l\x= x1 l\y= y1 l\x2=x2 l\y2=y2 l\status=0 End Function Beispielprogramm: Code: [AUSKLAPPEN] Graphics 1024,768,32,2 SetBuffer BackBuffer() timer=CreateTimer(60) Include "fraktal_engine.bb" ;const main programm Const keyx=44 Const keyy=45 Const keyspace=57 Const keyenter=28 ;start settings tmpx=300 tmpy=568 tmpx2=724 tmpy2=568 Local suchtiefe=10 Local startlinie=1 Repeat ms=MilliSecs() md1=MouseDown(1) md2=MouseDown(2) mx=MouseX() my=MouseY() If KeyHit(keyx) And suchtiefe>0 Then suchtiefe=suchtiefe-1 If KeyHit(keyy) Then suchtiefe=suchtiefe+1 If md1 Then tmpx=mx tmpy=my EndIf If md2 Then tmpx2=mx tmpy2=my EndIf delete_lines();löscht alle Linien, damit neu gerechnet werden kann fraktal_coords(tmpx,tmpy,tmpx2,tmpy2) If KeyHit(keyenter) modi=Not modi createfraktal(suchtiefe,modi) Color 255,255,255 Text 0 ,0,MilliSecs()-ms Text 50,0," Millisekunden Rechenzeit" ms=MilliSecs() Color 200,200,200 renderfraktal() Color 255,255,255 If KeyHit(keyspace) startlinie=Not startlinie If startlinie Then Color 0,255,0 Line tmpx,tmpy,tmpx2,tmpy2 Color 255,255,255 EndIf Text 0 ,20,MilliSecs()-ms Text 50,20," Millisekunden Renderzeit" Text 900, 0,"Tiefe "+suchtiefe Text 900,20,"Linien: "+anzahl_linien() ms=MilliSecs():Text 900,40,"FpS "+fps If ms>mt mt=ms+502:fps=frame:frame=0 Else frame=frame+2 Flip(0):Cls ;WaitTimer(timer) Until KeyHit(1) Vielleicht könnt ihr mal eure Rechenzeiten des Fraktales durchgeben, das Render erfolgt ganz Primitiv mit Line ![]() Features: ![]() ![]() ![]() ![]() ![]() ![]() Ich hoffe es kann jemand was damit anfangen, wenn nicht (habe auch damit gerechnet ![]() Edit: dies wurde mit einer Iteraktiven Lösung geschrieben, denn die Rekrusive braucht logischerweise mehr speicher. Edit 2: die wenigen FPS auf dem Screenshot gehen auf das Screenshot tool, dank der Verbesserung durch Lockbuffer ist das noch um einiges schneller !! Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
- Zuletzt bearbeitet von TimBo am So, Jun 28, 2009 16:58, insgesamt 3-mal bearbeitet
Fredko |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sieht schön aus, in bunt und 3D wäre es wohl noch netter anzugucken und
vielleicht auch als Bildschirmschoner verwendbar ![]() An sich ist relativ schnell, aber füge mal bitte im Code in der Renderfunktion Code: [AUSKLAPPEN] LockBuffer Backbuffer() ... UnlockBuffer Backbuffer() ( siehe line ![]() ein. Wie gesagt, schöne Spielerei, eine 3D Umsetzung wäre genial wegen schneller Rotation usw. ![]() |
||
! |
![]() |
TimBo |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
danke für das Feedbaq ![]() ich werde den Code einfügen. In 3D kann man das an sich auch machen einfach anstatt Lines objekte einfügen und dementsprechend ausrichten ![]() Da man leicht die Koordinaten verändern kann und da es Echtzeitfähig ist, könnte man das ja echt als Bildschirmschoner verwenden, habe daran noch gar nicht gedacht. ^^ Die Farben könnte man ja Anhand der Position der Linien zuordnen, so könnte man coole Farbübergänge herzaubern XD Viele Grüße TimBo |
||
mfg Tim Borowski // CPU: Ryzen 2700x GPU: Nvidia RTX 2070 OC (Gigabyte) Ram: 16GB DDR4 @ 3000MHz OS: Windows 10
Stolzer Gewinner des BCC 25 & BCC 31 hat einen ersten Preis in der 1. Runde beim BWInf 2010/2011 & 2011/12 mit BlitzBasic erreicht. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group