benötigten Winkel für rotesprite errechnen lassen

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

benötigten Winkel für rotesprite errechnen lassen

Beitrag von Ghost »

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).
(nutze v. 3.3)
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

allgemein zu winkel kannste mal hier gucken:
http://www.purebasic.fr/german/viewtopi ... ght=#98124
my pb stuff..
Bild..jedenfalls war das mal so.
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

ok danke :D
ist aber ziemlch kopliziert :o
(nutze v. 3.3)
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

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...
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

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]
Bild
my pb stuff..
Bild..jedenfalls war das mal so.
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

ok danke jetzt komms langsam :) ... ich versuch es einfach mal

Edit
ähm also cos ist = x differenz
und sin ist = y differenz
aber wie kommt man auf den Tangens ist das dann Gegenkathete (aslo y differenz)/ankathete(x-differenz)?
(nutze v. 3.3)
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7032
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

Hier das brauchst du :

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
kurze erläuterung:
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
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

Danke :)
(nutze v. 3.3)
Ghost
Beiträge: 141
Registriert: 10.04.2006 09:10

Beitrag von Ghost »

ä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.

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)
Benutzeravatar
#NULL
Beiträge: 2239
Registriert: 20.04.2006 09:50

Beitrag von #NULL »

da du die vorzeichen der differenzen ja gesonderst untersuchst, musst du sie innerhalb von aTan() ignorieren.
--> ATan( Abs(gegenkathete) / Abs(ankathete) )

[ich weiß aber nich wie riskant die Abs()-funktionm mit integern is.]
my pb stuff..
Bild..jedenfalls war das mal so.
Antworten