Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

1

31.03.2016, 16:53

Punkt im Kreis finden

Hallo zusammen,

ich suche eine Möglichkeit mit der ich einen Bekannten Punkt in einem Kreis finden kann.
Ich habe also einen Kreis und setze dort einen Punkt rein und möchte wissen bei wie viel Grad dieser Punkt liegt (0° sind natürlich statisch).
Ich brauche das ganze für eine Dartscheibe. Dort möchte ich wissen auf welches Feld der User geklickt hat.

Meine bisherige Idee sah in etwa so das ich mir die Abgrenzung der Felder beim Dart als Hilfsline nehme
  • Mit Hilfe des Normalenvektors der ersten Abgrenzung eines Feldes den Abstand zum Punkt berechnen. Und mir den Punkt auf der Line merken bei dem der Normalenvektor die Line schneidet
  • Den Schnittpunkt (Normalenvektor, Line) nehmen und von hier aus mit Hilfe des Normalenvektors die Entfernung zur zweiten Line berrechen.
  • Den Abstand zwischen der zweiten Line und dem Punkt bestimmen
  • Die Ergebnise vergleichen Abstand L1-P < Abstand L1-L2 und L2-P < Abstand L1-L2
  • Wenn nicht mir zwei neue Linen suchen

Ist der weg so geschickt oder mache ich das besser anders?

Nimelrian

Alter Hase

Beiträge: 1 216

Beruf: Softwareentwickler (aktuell Web/Node); Freiberuflicher Google Proxy

  • Private Nachricht senden

2

31.03.2016, 17:08

Naja, du wirst ja wohl wissen, wo Mittelpunkt und Auftreffpunkt vom Pfeil liegen. Von da ist es doch eigentlich nur ein wenig Trigonometrie, um den Winkel herauszufinden.
Ich bin kein UserSideGoogleProxy. Und nein, dieses Forum ist kein UserSideGoogleProxyAbstractFactorySingleton.

Tobiking

1x Rätselkönig

  • Private Nachricht senden

3

31.03.2016, 17:14

Wenn du Polarkoordinaten benutzt, ist die Vorgehensweise genau so als wenn man prüft ob karthesische Koordinaten in einem Rechteck sind. Du musst nur den geklickten Punkt in Polarkoordinaten umwandeln und dann prüfen ob anfangsWinkel < klickWinkel < endWinkel und anfangsAbstand < klickAbstand < endAbstand.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

31.03.2016, 19:04

Naja, du wirst ja wohl wissen, wo Mittelpunkt und Auftreffpunkt vom Pfeil liegen. Von da ist es doch eigentlich nur ein wenig Trigonometrie, um den Winkel herauszufinden.

Um das etwas genauer auszuführen. Dein Mittelpunkt ist der Ausgangspunkt. Von diesem aus ziehst du auf der X-Achse eine Linie zu deinem Zielpunkt. Das selbe machst du auf der Y-Achse. Jetzt hast du ein Dreieck gebildet. Wie du da an den Winkel kommst solltest du mit Schulmathe recht einfach lösen können. Zeichne dir das ganze mal beispielhaft auf, guck dir das resultierende Dreieck an und überleg dann noch mal wie du es berechnen kannst.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

5

01.04.2016, 01:38

atan2(y,x) gibt dir den winkel in radianten


p = dein punkt
c = zentrum der scheibe

dy = p.y-c.y;
dx = p.x-c.x;

a = atan2(dy,dx);

brauche das dauernd.

für den abstand vom mittelpunkt
r = sqrt(dx*dx+dy*dy)

damit müsstest du jedes feld identifizieren können

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

6

02.04.2016, 17:41

Vielen dank marcgfk. Das lies sich ja sehr einfach Umsetzen.

Was genau macht aber dern atan2(); warum bekommt der zwei Parameter?

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

7

02.04.2016, 18:07

a = atan2(dy,dx);
Ich denke, er meinte: a = atan(dy/dx);
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Volker_Neff

Treue Seele

  • »Volker_Neff« ist der Autor dieses Themas

Beiträge: 249

Wohnort: Hamburg

  • Private Nachricht senden

8

02.04.2016, 20:15

Ich glaube das stimmt schon so, auf Jedenfall gibt es diese Funktion

Tobiking

1x Rätselkönig

  • Private Nachricht senden

9

02.04.2016, 22:18

Mit atan wird nur ein Bereich der Größe 180° Abgedeckt, da die Tangensfunktion periodisch mit einer Periodenlänge von 180° ist. Die atan2 Funktion hat zusätzliche Fallunterscheidungen für die verschiedenen Quadranten im Koordinatenkreuz um die ganzen 360° abzudecken (siehe https://de.wikipedia.org/wiki/Arkustange…ten_.28atan2.29)

CeDoMain

Alter Hase

Beiträge: 587

Wohnort: Ilmenau

Beruf: Student für Mechatronik

  • Private Nachricht senden

10

02.04.2016, 22:19

https://de.wikipedia.org/wiki/Arkustange…kotangens#atan2

Hier wird beschrieben, was der Unterschied zwischen meiner Variante und der von marcgfx ist. Dieses Bild ist eine gute Zusammenfassung:


(Link)


Wie du siehst ist es eine Erweiterung der von mir angegebenen Funktion. Nimm aber die von marcgfx, dann musst du nicht so viele Fälle unterscheiden. ;)

EDIT: Tobiking war schneller...
Mit freundlichem Gruß
CeDo
Discord: #6996 | Skype: cedomain

Lass solche persönlichen Angriffe lieber bleiben, meine sind härter.

Werbeanzeige