Scripte - so oder besser anders?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

M0rgenstern

BeitragSa, Mai 07, 2011 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hey mpmxyz.
Habe mir deinen Code mal angeschaut und dann passend für meinen umgeschrieben.
Habe auch schon direkt was dran verändert: Man kann jetzt über einen weiteren Parameter bestimmen, ob rechts oder links an dem Punkt vorbeigeflogen werden soll, da es mich einfach gestört hat, dass grundsätzlich nur Rechtskurven geflogen wurden.

Ich muss auch ehrlich sagen, dass mich die ganze Rechnerei dahinter so interessiert hat, dass ich mir das ganze auf ein Koordinatensystem gezeichnet habe und ungefähr 3 - 4 Durchgänge gerechnet und habe dann gesehen, wie sich der Kreis andeutet.

Wenn ich jetzt den Code mit deiner Beschreibung verlgeiche, dann sehe ich auch, was wozu gehört und jetzt habe ich es auch verstanden, bis auf die Mathematik, die hinter der Winkel Sache steht.

Hier ist jetzt der Code, den ich für die Bewegung benutze, damit du siehst, dass ich mir selbst nochmal Gedanken drüber gemacht habe und es nicht einfach kopiert habe:

BlitzMax: [AUSKLAPPEN]
	If bTurning Then
'Drehen um den Punkt
pVecPosition.Set_X(pVecPosition.Get_X() - v2dReferencePoint.Get_X())
pVecPosition.Set_y(pVecPosition.Get_y() - v2dReferencePoint.Get_y())

'Abspeichern
Local v2dOldPos:TVector2D = TVector2d.Create(pVecPosition.Get_X(), pVecPosition.Get_Y())

'Radius berechnen:
Local fRadius:Float = Sqr(pVecPosition.Get_X() * pVecPosition.Get_X() + pVecPosition.Get_Y() * pVecPosition.Get_Y())

'Geschwindigkeit, abhängig vom Radius
Local fAverageSpeed:Float = 0.5 * (pVecSpeed.Get_X() + pVecSpeed.Get_Y())
Local fAngularSpeed:Float = (fAverageSpeed / fRadius) * 180.0 / Pi

If iaParameterList[2] = 0 Then 'Rechtsrum drehen
pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() - Sin(fAngularSpeed) * v2dOldPos.Get_Y())
pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() + Sin(fAngularSpeed) * v2dOldPos.Get_X())
ElseIf iaParameterList[2] = 1 Then 'Linksrum drehen
pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() + Sin(fAngularSpeed) * v2dOldPos.Get_Y())
pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() - Sin(fAngularSpeed) * v2dOldPos.Get_X())
EndIf

Return TVector2D.Create(pVecPosition.Get_X() + v2dReferencePoint.Get_X(), pVecPosition.Get_y() + v2dReferencePoint.Get_y())
Else
v2dReferencePoint = TVector2D.Create(pVecPosition.Get_X() + iaParameterList[0], pVecPosition.Get_Y() + iaParameterList[1])
bTurning = True

'Drehen um den Punkt
pVecPosition.Set_X(pVecPosition.Get_X() - v2dReferencePoint.Get_X())
pVecPosition.Set_y(pVecPosition.Get_y() - v2dReferencePoint.Get_y())

'Abspeichern
Local v2dOldPos:TVector2D = TVector2d.Create(pVecPosition.Get_X(), pVecPosition.Get_Y())

'Radius berechnen:
Local fRadius:Float = Sqr(pVecPosition.Get_X() * pVecPosition.Get_X() + pVecPosition.Get_Y() * pVecPosition.Get_Y())

'Geschwindigkeit, abhängig vom Radius
Local fAverageSpeed:Float = 0.5 * (pVecSpeed.Get_X() + pVecSpeed.Get_Y())
Local fAngularSpeed:Float = (fAverageSpeed / fRadius) * 180.0 / Pi

If iaParameterList[2] = 0 Then 'Rechtsrum drehen
pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() - Sin(fAngularSpeed) * v2dOldPos.Get_Y())
pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() + Sin(fAngularSpeed) * v2dOldPos.Get_X())
ElseIf iaParameterList[2] = 1 Then Linksrum drehen
pVecPosition.Set_X(Cos(fAngularSpeed) * v2dOldPos.Get_X() + Sin(fAngularSpeed) * v2dOldPos.Get_Y())
pVecPosition.Set_Y(Cos(fAngularSpeed) * v2dOldPos.Get_Y() - Sin(fAngularSpeed) * v2dOldPos.Get_X())
EndIf

Return TVector2D.Create(pVecPosition.Get_X() + v2dReferencePoint.Get_X(), pVecPosition.Get_y() + v2dReferencePoint.Get_y())
EndIf


Vielen Dank für die zahlreichen Erklärungen.

Lg, M0rgenstern

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group