Drachenfraktal
Übersicht
BlitzBasic
Codearchiv|
|
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 , damit dauert das Rendern kaum was )
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
BlitzBasic
Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group


