Kochkurve - ein Fraktal alten Ranges!
Übersicht

DarrenBetreff: Kochkurve - ein Fraktal alten Ranges! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Guten Tag!
Ich bin grade dabei mich ein wenig mit der Arbeit von Mandelbrot zu beschäftigen, und habe mal gestern und heute den code für eine Kochkurve eingehackt. Man muss zweimal ins bild klicken. Mit der Gerade, die von den beiden Punkten festgelegt wird, wird ein gleichseitiges Dreieck konstruiert und das dan als Generator benutzt. Iterator ist wie bei der normalen Kochkurve normal das gleichseitige Dreieck über dem mittleren Drittel. Was eine Fraktale Dimension von log(4)/log(3) ergibt. ![]() Code: [AUSKLAPPEN] ;kochkurve.bb
Type r2_vec ;richtungen mit prefix d_, positionen mit l_ Field x1# Field x2# End Type Type r2_line Field l_a.r2_vec Field l_b.r2_vec Field d_v.r2_vec ;normalisiert Field length# Field angle# End Type Type seite Field linie.r2_line[3] Field schritt End Type Graphics 800,600,16,2 SetBuffer BackBuffer() Local pkt1.r2_vec Local pkt2.r2_vec Local strich.r2_line Local draw_p.r2_vec Local draw_l.r2_line Local iterationen = Input("Iterationen: ") Local inverse = Input("Invert Fraktal? - 0 = No; 1 = Yes: ") Local i = 0,j = 0 Local erstellt = 0 Global koeffizient_h# = 0.5 * Sqr(3) Local spitze.r2_vec Local kante.seite Local kante_neu.seite While Not KeyHit(1) Cls If MouseHit(1) And erstellt = 0 Then If pkt1 = Null Then pkt1 = New r2_vec pkt1\x1 = MouseX() pkt1\x2 = MouseY() Else pkt2 = New r2_vec pkt2\x1 = MouseX() pkt2\x2 = MouseY() erstellt = 1 End If If erstellt = 1 Then spitze = create_tris(pkt1,pkt2) kante = New seite kante\linie[0] = New r2_line kante\linie[0]\l_a = pkt1 kante\linie[0]\l_b = pkt2 kante\linie[1] = New r2_line kante\linie[1]\l_a = pkt2 kante\linie[1]\l_b = spitze kante\linie[2] = New r2_line kante\linie[2]\l_a = spitze kante\linie[2]\l_b = pkt1 kante\linie[3] = New r2_line kante\linie[3]\l_a = New r2_vec kante\linie[3]\l_a\x1 = 0 kante\linie[3]\l_a\x2 = 0 kante\linie[3]\l_b = New r2_vec kante\linie[3]\l_b\x1 = 0 kante\linie[3]\l_b\x2 = 0 Local p1.r2_vec Local p2.r2_vec For i = 0 To iterationen For kante = Each seite For j = 0 To 3 p1.r2_vec = divide_line(kante\linie[j],0.33333) p2.r2_vec = divide_line(kante\linie[j],0.66666) If inverse = 1 Then spitze = create_tris(p1,p2) Else spitze = create_tris(p2,p1) End If kante_neu = New seite Insert kante_neu Before First seite kante_neu\linie[0] = New r2_line kante_neu\linie[1] = New r2_line kante_neu\linie[2] = New r2_line kante_neu\linie[3] = New r2_line kante_neu\linie[0]\l_a = kante\linie[j]\l_a kante_neu\linie[0]\l_b = p1 kante_neu\linie[1]\l_a = p1 kante_neu\linie[1]\l_b = spitze kante_neu\linie[2]\l_a = spitze kante_neu\linie[2]\l_b = p2 kante_neu\linie[3]\l_a = p2 kante_neu\linie[3]\l_b = kante\linie[j]\l_b Delete kante\linie[j] Next Delete kante Next Next End If End If For draw_p = Each r2_vec ;Line draw_p\x1-2,draw_p\x2-2,draw_p\x1+2,draw_p\x2+2 ;Line draw_p\x1+2,draw_p\x2-2,draw_p\x1-2,draw_p\x2+2 Next For draw_l = Each r2_line Line draw_l\l_a\x1,draw_l\l_a\x2,draw_l\l_b\x1,draw_l\l_b\x2 Next Text 10,10, "iterationen:" + iterationen Flip ;FlushKeys() ;FlushMouse() Wend End Function divide_line.r2_vec(l.r2_line,t#);t = prozentual auf der linie Local t1_x1#,t1_x2# Local laenge# = Sqr((l\l_a\x1-l\l_b\x1)^2 + (l\l_a\x2-l\l_b\x2)^2) Local d_x1#,d_x2# d_x1 = (l\l_a\x1 - l\l_b\x1)/laenge d_x2 = (l\l_a\x2 - l\l_b\x2)/laenge t1_x1 = l\l_a\x1 - t*laenge*d_x1 t1_x2 = l\l_a\x2 - t*laenge*d_x2 Local t1.r2_vec = New r2_vec t1\x1 = t1_x1 t1\x2 = t1_x2 Return t1 End Function Function create_tris.r2_vec(p1.r2_vec,p2.r2_vec) Local m_x1#,m_x2# m_x1 = (p1\x1 + p2\x1)/2 m_x2 = (p1\x2 + p2\x2)/2 Local laenge = Sqr((p1\x1 - p2\x1)^2 + (p1\x2 - p2\x2)^2) Local hoehe_length = laenge * koeffizient_h Local d_x1#,d_x2# d_x1 = (p2\x2 - p1\x2)/laenge d_x2 = (-p2\x1 + p1\x1)/laenge Local peak_x1# = m_x1 + d_x1 * hoehe_length Local peak_x2# = m_x2 + d_x2 * hoehe_length Local peak.r2_vec = New r2_vec peak\x1 = peak_x1 peak\x2 = peak_x2 Return peak End Function |
||
MFG Darren |
![]() |
Firstdeathmaker |
![]() Antworten mit Zitat ![]() |
---|---|---|
4 iterationen gehen bei mir noch problemlos, bei 5 gibt es leider grafikfehler (die lines gehen alle zum oberen linken Bildschirmrand). Sonst ne nette Spielerei ![]() |
||
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon Gewinner des BCC #57 User posted image |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ist Mathematik doch immer wieder was schönes ![]() Ich finds sehr gut gelungen. |
||
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hab gerade nur mein Notebook. Und hier passiert nach eingabe der Daten nichts. | ||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Darren |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Triton:
ja du musst noch mit zwei mausklicks eine seite des gleichseitigen dreiecks festlegen! |
||
MFG Darren |
![]() |
Triton |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ach bin ich doof.
Jaja, lesen-können ist von vorteil ![]() ![]() Abgesehen davon wird die Darstellung auch bei mir ab 5 Stufen fehlerhaft. |
||
Coding: silizium-net.de | Portfolio: Triton.ch.vu |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group