benötigten Winkel für rotesprite errechnen lassen
benötigten Winkel für rotesprite errechnen lassen
HI
ich hab ein Problem: Ich suche eine möglichkeit einen Winkel (für rotedsprite3D zu errechnen.Das Sprite soll sich nur solange drehen bis es nach einen betimmten Punkt zeigt.
(Also ich Möchte gerne ein strategiespiel Programieren und habe Probleme mit der bewegung der Einheiten und zwar: bevor die Einheiten zu einen durch ein Mausklick mackierten Punkt bewegen. sollen sie sich vorherr dorthinn drehen.aber dafür brauch ich ein Winkel (wie weit sie sich drehen sollen) aber ich weiß leider nicht wie ich diesen Winkel errechnen kann).
ich hab ein Problem: Ich suche eine möglichkeit einen Winkel (für rotedsprite3D zu errechnen.Das Sprite soll sich nur solange drehen bis es nach einen betimmten Punkt zeigt.
(Also ich Möchte gerne ein strategiespiel Programieren und habe Probleme mit der bewegung der Einheiten und zwar: bevor die Einheiten zu einen durch ein Mausklick mackierten Punkt bewegen. sollen sie sich vorherr dorthinn drehen.aber dafür brauch ich ein Winkel (wie weit sie sich drehen sollen) aber ich weiß leider nicht wie ich diesen Winkel errechnen kann).
(nutze v. 3.3)
allgemein zu winkel kannste mal hier gucken:
http://www.purebasic.fr/german/viewtopi ... ght=#98124
http://www.purebasic.fr/german/viewtopi ... ght=#98124
-
Kaeru Gaman
- Beiträge: 17389
- Registriert: 10.11.2004 03:22
vielleicht würde es dir was helfen, zuerst mal die grundlagen von trigonometrie nachzulesen, bei Wiki findest du bestimmt was.
wenn man weiß, dass der sinus eines winkels gegenkathete/hypothenuse entspricht, und der cosinus ankathete/hypothenuse, und zusätzlich noch weiß, wie man das auf ein rechtwinkliges dreieck im einheitskreis anwendet, dann ist das schon garnicht mehr kompliziert, weil man sich was drunter vorstellen kann...
wenn man weiß, dass der sinus eines winkels gegenkathete/hypothenuse entspricht, und der cosinus ankathete/hypothenuse, und zusätzlich noch weiß, wie man das auf ein rechtwinkliges dreieck im einheitskreis anwendet, dann ist das schon garnicht mehr kompliziert, weil man sich was drunter vorstellen kann...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Der Weise weiß, dass er ein Narr ist.
du hast zwei punkte (hier den mittelpunkt des koordinatensystems und den punkt auf dem kreis) die eine linie mit dem radius 1 angeben. diese hat dann einen winkel (hier alpha). die x-differenz der beiden punkte ist der Cosinus des winkels; die y-differenz der beiden punkte ist der Sinus des winkels.
-> so kannst du also die position des äusseren punktes berechnen, wenn du ihn in einem bestimmten winkel zum ursprungspunkt haben willst. du musst die koordinaten differenzen nur noch multiplizieren mit der gewünschten entfernung, sonst hat die linie nur den radius 1 ('Einheitskreis').
andersherum:
wenn du die koordinaten der beiden punkte weißt, und du willst den winkel wissen, den die resultierende line hat, dann benutzt du den arcus-tangens:
winkel = ATan( y-differenz/x-differenz )
praktisch wird's dann nur ein bisschen mehr, weil du die vorzeichen beachten musst (fallunterscheidung), je nachdem welcher der beiden punkte links/oben/unten/rechts von dem anderen ist. und falls du zwischen grad-maß und bogenmaß hin und her rechnest musst du eben darauf achten wo du welches maß verwendest.
[von wikipedia]

-> so kannst du also die position des äusseren punktes berechnen, wenn du ihn in einem bestimmten winkel zum ursprungspunkt haben willst. du musst die koordinaten differenzen nur noch multiplizieren mit der gewünschten entfernung, sonst hat die linie nur den radius 1 ('Einheitskreis').
andersherum:
wenn du die koordinaten der beiden punkte weißt, und du willst den winkel wissen, den die resultierende line hat, dann benutzt du den arcus-tangens:
winkel = ATan( y-differenz/x-differenz )
praktisch wird's dann nur ein bisschen mehr, weil du die vorzeichen beachten musst (fallunterscheidung), je nachdem welcher der beiden punkte links/oben/unten/rechts von dem anderen ist. und falls du zwischen grad-maß und bogenmaß hin und her rechnest musst du eben darauf achten wo du welches maß verwendest.
[von wikipedia]

Hier das brauchst du :
kurze erläuterung:
x, y = Einheitenposition
Px, Py = Zielpunktposition
t = Winkel (von 0° bis 359°, also für Rotate )
Code: Alles auswählen
b.f = 3.14159265/180
t.f = ATan((y-Py)/(x-Px))/b
If x-Px < 0 : t = t + 180 : EndIf
If x-Px = 0 :
If (y-Py)<0 : t = -90 : EndIf
If (y-Py)>0 : t = 90 : EndIf
EndIf
x, y = Einheitenposition
Px, Py = Zielpunktposition
t = Winkel (von 0° bis 359°, also für Rotate )
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
ähm kann das sein das man noch t -180 anhängen muss ?bei mir hatt er sonst immer genau in die falsche richtung gezeigt ... aber vll. hab ich auch einen fehler drinn.
Playerx\y=x\y
Mousex\y()=Px PY
al=t
Code: Alles auswählen
b.f = 3.14159265/180
al.f = ATan((MouseY()-playery)/(MouseX()-playerx))/b
If Playerx-MouseX() < 0 : al = al + 180 : EndIf
If Playerx-Mousex() = 0 :
If (Playery-MouseY())<0 : al = -90 : EndIf
If (Playery-MouseY())>0 : al = 90 : EndIf
EndIf
al-180
Playerx\y=x\y
Mousex\y()=Px PY
al=t
(nutze v. 3.3)
