Knotenpunkte aus Ursprungsknoten erstellen (Fraktalbaum)
Übersicht

![]() |
TravisBetreff: Knotenpunkte aus Ursprungsknoten erstellen (Fraktalbaum) |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich versuche momentan ein Programm zu schreiben, dass einen Fraktalbaum erzeugt.
![]() Ich habe mir das so vorgestellt, das ich einen Knotenpunkt erstelle. Dieser hat seine Koordinaten, eine Länge und einen Winkel. Außerdem noch zwei Variablen für die Koordinaten seines Ursprunges. Code: [AUSKLAPPEN] Type Node Field x,y,w,l Field sx,sy End Type Wird ein Knoten erstellt, dann wird automatisch ein neuer Knoten erstellt. Dieser befindet sich in einem Abstand und um 10 Grad versetzt zum Ursprungsknoten. Code: [AUSKLAPPEN] Function CreateNode(x,y,w,l, sx,sy) ; sx und sy = Ursprung If Nodes < MaxNodes Then n.node = New node n\x = x n\y = y n\w = w n\l = l n\sx = sx n\sy = sy Nodes = Nodes + 1 CreateNode((n\sx + Cos(n\w-10) * n\l), (n\sy + Sin(n\w-10) * n\l), n\w-10, n\l/2, n\x, n\y) EndIf End Function Die Länge des neuen Knotens (nicht lachen) entspricht der Hälfte der Länge des Ursprungsknotens. Der Winkel des neuen Knotens wird um 10 Grad geändert. Nach meiner Vorstellung sollte sich jetzt etwa sowas ergeben (Bild A) ![]() Allerdings sieht es aus wie im Bild B. Der zweite Knotenpunkt entsteht im Winkel von 90 Grad vom ersten Knotenpunkt. Der Knoten hat aber den korrenkten Winkel. Der Abstand scheint noch zu stimmen. Ab dem dritten Punkt wird's dann ganz verrückt. Der Abstand wird wieder größer und der Winkel gerät total außer Kontrolle (Obwohl die entsprechenden Variablen noch stimmen). Hier mal der ganze Code: www.funforge.org/Public/Treemaker2.bb Ich rätsel hier schon stundenlang herum und kann den Denkfehler nicht finden. Vielleicht könnt ihr mir da helfen. EDIT: Hier noch ein anderer Versuch. Bei ihm speichere ich in jedem Knoten alle Variablen des Ursprungsknotens. Die Werte des neuen Knotens werden dann mit den Werten des Ursprunsknotens berechnet. HTTP://www.funforge.org/Public/Treemaker.bb |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
- Zuletzt bearbeitet von Travis am Di, Jan 18, 2005 16:36, insgesamt einmal bearbeitet
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hi,
schau dir mal den code hier an. Code: [AUSKLAPPEN] Graphics 800,600,32,2 SetBuffer(BackBuffer()) Type open Field x#,y# Field length# Field parent.open Field grad# Field r,g,b Field close End Type a.open = New open a\grad = -90 a\x = 400 a\y = 500 a\length = 300 timer = CreateTimer(25) While Not KeyHit(1) WaitTimer(timer) Cls For a.open = Each open doKnot(a.open) If a\parent <> Null Color(a\r,a\g,a\b) Line(a\x,a\y,a\parent\x,a\parent\y) End If count = count + 1 Next Text 10,10,count count = 0 Flip() Wend Function doKnot(a.open) If a\close > 4 Then Return If a\length < 10 Then Return a\close = a\close + 1 an.open = New open an\length = a\length / 2 an\grad = a\grad + Rand(-40,40) an\x = a\x + an\length * (Cos(an\grad)) an\y = a\y + an\length * (Sin(an\grad)) an\parent = a an\r = Rand(50,255) an\g = Rand(50,255) an\b = Rand(50,255) End Function |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Typen können sich selber in sihc haben ![]() Code: [AUSKLAPPEN] Type Node Field x,y,w,l Field sx,sy Field parent.Node End Type Function CreateNode(x,y,w,l, Ursprung.node) ; sx und sy = Ursprung If Nodes < MaxNodes Then n.node = New node parent = Ursprung n\x = x n\y = y n\w = w n\l = l n\sx = Ursprung\x;sx n\sy = Ursprung\y;sy Nodes = Nodes + 1 CreateNode((n\sx + Cos(n\w-10) * n\l), (n\sy + Sin(n\w-10) * n\l), n\w-10, n\l/2, n.node) EndIf End Function |
||
between angels and insects |
![]() |
Travis |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte auch erst vor, den Type des Ursprungsknoten beim Erstellen zu übergeben. Das hatte ich bisher noch nie gemacht.
Code: [AUSKLAPPEN] Line(a\x, a\y, a\parent\x, a\parent\y) Ganz schön kompliziert. Das Beispiel hat mir aber sehr geholfen. Ich denke nun bin ich auf dem richtigen Weg. ![]() ![]() ![]() ![]() HTTP://www.funforge.org/Public/treemaker.bb |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
Klaas |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
gefällt mir sehr gut !
Jetzt bitte noch in 3D und einen hübschen Tree-Generator draus machen ![]() |
||
![]() |
Jan_Ehemaliger Admin |
![]() Antworten mit Zitat ![]() |
---|---|---|
naja, schaue mal nach Bezier Splines, z.Z. Sieht es nicht wirklich gut aus. | ||
between angels and insects |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group