Knotenpunkte aus Ursprungsknoten erstellen (Fraktalbaum)

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Travis

Betreff: Knotenpunkte aus Ursprungsknoten erstellen (Fraktalbaum)

BeitragDi, Jan 18, 2005 2:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich versuche momentan ein Programm zu schreiben, dass einen Fraktalbaum erzeugt.

user posted image

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)

user posted image

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

BeitragDi, Jan 18, 2005 12:19
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Jan 18, 2005 13:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Typen können sich selber in sihc haben Smile

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

BeitragDi, Jan 18, 2005 14:42
Antworten mit Zitat
Benutzer-Profile anzeigen
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. Smile Danke für die Hilfe.


Arrow EDIT2: Hier mal die zweite VersionSmile

user posted image
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

BeitragMi, Jan 19, 2005 10:38
Antworten mit Zitat
Benutzer-Profile anzeigen
gefällt mir sehr gut !

Jetzt bitte noch in 3D und einen hübschen Tree-Generator draus machen Very Happy

Jan_

Ehemaliger Admin

BeitragMi, Jan 19, 2005 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
naja, schaue mal nach Bezier Splines, z.Z. Sieht es nicht wirklich gut aus.
between angels and insects

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group