Schiff in gewünschte Richtung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

Kryan

Betreff: Schiff in gewünschte Richtung

BeitragDi, Dez 23, 2003 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallöchen,
weiss jemand zufälligerweise, wie man ein Schiff in eine gewünschte Richtung dreht.
Im Klartext:
Ich klicke irgendwo hin und das Schiff dreht sich dann in die Richtung?

Jan_

Ehemaliger Admin

BeitragDi, Dez 23, 2003 15:03
Antworten mit Zitat
Benutzer-Profile anzeigen
willst du es Theoretisch, wenn ja, dann benutzte die Dreiecksberechnung um den Winkel auszurechnen, dannn Drehst u es in die kürzere Richtung solange bis der Winkel erreicht ist, und dann fährst du in diese Richtung (wird mit Winkel + sin + cosin berechnet)
between angels and insects

Kryan

BeitragDi, Dez 23, 2003 15:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst mal ein Beispiel machen?
Hab 2 Tage dafür schon geopfert!

TheShadow

Moderator

BeitragDi, Dez 23, 2003 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
ATAN2
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Vertex

BeitragDi, Dez 23, 2003 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Winkel zwischen Punkt P1 und P2:
Winkel = ATan((P2Y - P1Y) / (P2X - P1X))
Tan ergibt sich ja aus Gegenkathete durch Ankathete. ATan ist der
umkehrwert für Tan:
Winkel = ATan(Tan(Winkel))
mfg olli

TheShadow

Moderator

BeitragDi, Dez 23, 2003 16:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ATAN2 ist besser
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Kryan

BeitragDi, Dez 23, 2003 21:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Nach inem Wissensbuch über Mathematik habe ich so eine trigonomische Formel in BBCode umgewandelt.
Dürfte so aussehen:

Function Winkel(X1,Y1,X2,Y2)
For I=1 To 360
If Y1+Y2=X1+X2*(sin(I)/cos(I)) Then Return I
Next
End Function

Klappte aber nicht,ich nehme lieber Vertex Lösung!
 

konstantin

BeitragDi, Dez 23, 2003 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
ATAN2
Achja, dieses Thema hat heute schonmal jemand gefragt.
Da kam folgendes raus:

Code: [AUSKLAPPEN]

Graphics 640, 480, 16, 2
SetBuffer BackBuffer()

Global x_mouse = 0
Global y_mouse = 0

Global pointer_length = 100

Global pointer_x = 640 / 2
Global pointer_y = 480 / 2

Global pointer_x2 = 0
Global pointer_y2 = 0

Global alpha = 0

Function PrintKO()
   Text 10, 10, x_mouse + " | "+  y_mouse + " | " + alpha + "°"
End Function

Function PrintPO()
   Line pointer_x, pointer_y, pointer_x2 + pointer_x, pointer_y2+pointer_y
End Function

Function Setalpha()
   Alpha = (ATan2(pointer_y - MouseY(), pointer_x - MouseX())+360) Mod 360: Alpha = Alpha - 180
   Pointer_x2 = Cos(alpha) * pointer_length
   pointer_y2 = Sin(alpha) * pointer_length
End Function

While Not KeyDown(1)
   Cls

   x_mouse = MouseX()
   y_mouse = MouseY()

   SetAlpha()
   PrintKO()
   PrintPO()
   Flip()
Wend

Rallimen

Sieger des 30-EUR-Wettbewerbs

BeitragDo, Dez 25, 2003 11:00
Antworten mit Zitat
Benutzer-Profile anzeigen
hier mal meine Function zum ermitteln der Gradzahl
einfach mal auprobierenCode: [AUSKLAPPEN]
Graphics  800,600,16,2
SetBuffer BackBuffer()

Repeat
   x= MouseX ()
   Y= MouseY ()
  Rect 398 ,298,4,4,1; mitte
   
  winkel = Objekt_richtung_grad_Kurzversion(x,y ,400 ,300)
   ;winkel = Objekt_richtung_grad(x,y ,400 ,300)
   Text 100,100, winkel + " Grad"
   Flip
   Cls
Until KeyHit (1)
End


Function Objekt_richtung_grad(Zielpunkt_X,Zielpunkt_Y,Ausgangspunkt_X,Ausgangspunkt_Y )
  Waagerechte  = Zielpunkt_X -Ausgangspunkt_X
  Hoehe              = Zielpunkt_Y -Ausgangspunkt_Y
    ;0 grad ist hier nach oben und im Uhrzeigersinn wird er höher
  grad =ATan2(Hoehe ,Waagerechte)+90
  If grad < 0 Then grad = grad+360
  Return grad
;   ;0 grad ist hier nach links und im Uhrzeigersinn wird er höher
;grad =ATan2(Hoehe ,Waagerechte)+180
;Return grad
; gegen den uhrzeiger
End Function

Function Objekt_richtung_grad_Kurzversion(Zielpunkt_X,Zielpunkt_Y,Ausgangspunkt_X,Ausgangspunkt_Y )
  grad =ATan2(Zielpunkt_Y -Ausgangspunkt_Y, Zielpunkt_X -Ausgangspunkt_X)+90
  If grad < 0 Then grad = grad+360
  Return grad
End Function
Wenn es gegen den Uhrzeigersinn gehen solldann müssen die werte in der ATAN getauscht werden, allerdings ist dann 0Grad nach unten glaube ich , aber das läßt sich ja dann rausfinden
Vieleicht hilft es auch anderen die da noch was in diese Richtung brauchen
[BB2D | BB3D | BB+]

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group