Bezierkurven

Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Neue Antwort erstellen

Firstdeathmaker

Betreff: Bezierkurven

BeitragFr, Aug 12, 2005 3:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Kleine Spielerei mit Bezierkurven. Sie ist beim erlernen derselben herausgekommen:

BlitzBasic: [AUSKLAPPEN]

Global GFX_X=1280
Global GFX_Y=1024

Graphics GFX_X,GFX_Y,32,60


Type Punkt
Field x#
Field y#
End Type

Type Kurve
Field P1:Punkt
Field P2:Punkt
Field P3:Punkt
Field P4:Punkt
End Type


k:Kurve = New Kurve

k.P1 = Punkt_Create(Rand(0,GFX_X),Rand(0,GFX_Y))
k.P2 = Punkt_Create(Rand(0,GFX_X),Rand(0,GFX_Y))
k.P3 = Punkt_Create(Rand(0,GFX_X),Rand(0,GFX_Y))
k.P4 = Punkt_Create(Rand(0,GFX_X),Rand(0,GFX_Y))

Repeat'Hauptschleife



k.P1.x = k.P4.x
k.P1.y = k.P4.y

zufall#=Rnd(0,1)
rx# = k.P4.x-k.P3.x
ry# = k.P4.y-k.P3.y

k.P2.x = k.P1.x+rx
k.P2.y = k.P1.y+ry

k.P4.x = Rand(0,GFX_X)
k.P4.y = Rand(0,GFX_Y)


winkel# = Rand(0,359)
k.P3.x = k.P4.x+Sin(winkel)*200
k.P3.y = k.P4.y+Cos(winkel)*200



For t#=0 To 1 Step 0.01
Cls
x# = k.P1.x*(1-t)^3+3*k.P2.x*t*(1-t)^2+3*k.P3.x*t^2*(1-t)+k.P4.x*t^3
y# = k.P1.y*(1-t)^3+3*k.P2.y*t*(1-t)^2+3*k.P3.y*t^2*(1-t)+k.P4.y*t^3
DrawText \"Punkt\",x,y
Kurve_Draw(k:Kurve)
Flip
If KeyHit(27) End
Next

Forever

End




Function Punkt_Create:Punkt(x#,y#)
p:Punkt = New Punkt
p.x = x
p.y = y
Return p
End Function


Function Kurve_Draw(k:Kurve)
Local x#,y#,lastx#,lasty#,t#

x# = k.P1.x*(1-t)^3+3*k.P2.x*t*(1-t)^2+3*k.P3.x*t^2*(1-t)+k.P4.x*t^3
y# = k.P1.y*(1-t)^3+3*k.P2.y*t*(1-t)^2+3*k.P3.y*t^2*(1-t)+k.P4.y*t^3

For t=0 To 1 Step 0.05
lastx# = x#
lasty# = y#
x# = k.P1.x*(1-t)^3+3*k.P2.x*t*(1-t)^2+3*k.P3.x*t^2*(1-t)+k.P4.x*t^3
y# = k.P1.y*(1-t)^3+3*k.P2.y*t*(1-t)^2+3*k.P3.y*t^2*(1-t)+k.P4.y*t^3
DrawLine lastx,lasty,x,y
Next
DrawText \"P1\",k.P1.x,k.P1.y
DrawText \"P2\",k.P2.x,k.P2.y
DrawText \"P3\",k.P3.x,k.P3.y
DrawText \"P4\",k.P4.x,k.P4.y
End Function


Wie ich gerade erst sehe hat vor kurzer Zeit erst Markus2 was zu diesem Thema geschrieben, aber vielleicht zeigt mein Code ja besser, was man noch damit machen kann (in Bewegung).
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image
 

David

BeitragFr, Aug 12, 2005 7:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Hmja, ganz nett...
Wo du sowieso gerade dabei bist, könntest du ja eine Implementation für Bezierpatches machen! *g*

grüße
 

Ava

Gast

BeitragMo, Aug 15, 2005 18:18
Antworten mit Zitat
Gibt es eigentlich eine Möglichkeit, die Strecke einer solchen Bezierkurve zu berechnen? Rolling Eyes

Firstdeathmaker

BeitragFr, Okt 21, 2005 13:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Daran habe ich mich vor kurzem versucht, bin aber gescheitert. Du müsstest die erste Ableitung der Kubischen Bezierfunktion plus 1 nehmen, davon die Wurzel ziehen und das ganze dann von t=0 bis t=1 integrieren.
www.illusion-games.de
Space War 3 | Space Race | Galaxy on Fire | Razoon
Gewinner des BCC #57 User posted image

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Codearchiv & Module

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group