Problem mit Winkeln

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem mit Winkeln

    Tach,
    nach langem Probieren und Verzweifeln wende ich mich mal an euch.
    Es gibt zwei zentrale Objekte, einen Spieler (kreis) und eine Wand (linie).

    (Das Ganze mal als Skizze, damit man's besser Versteht.)

    Was ich nun brauche, ist der Winkel, der sich durch die beiden Punkte ergibt, also durch den linken Punkt der Wand und der Position des Spielers.
    Dafür habe ich die beiden Längen a und b, wobei a der Abstand zwischen linkem Linienpunkt und X Position des Spielers ist und b die Distanz zwischen den beiden Koordinaten.
    Mithilfe des Tangens könnte ich jetzt eigentlich einen Winkel ausrechnen, jedoch ist das Ergebinis bei mir immer Fehlerhaft. Hier mein Code:

    GML-Quellcode

    1. radtodeg(arctan(abs(x-40+obj_player.x)/point_distance(x-40,y,obj_player.x,obj_player.y)));

    Diesen Winkel brauche ich, da ich errechnen will, ob der Spieler die Wand anguckt. Ich habe das Ganze mal in 2D neu geschrieben (gehört eigentlich zu einem 3D Fps), damit ihr es besser versteht, das sieht so aus:

    Die rote linie ist die direction vom Spieler, diese errechnet sich durch die Mausposition. Die beiden Werte sind die Spielerdirection (141°) und der fehlerhaft ausgerechnete Winkel (70°)
    Ich hoffe ihr versteht das Problem und könnt helfen, sonst fragt einfach nochmal nach.
    Danke, Moolt.
    Dateien
    • problem.zip

      (1,99 kB, 67 mal heruntergeladen, zuletzt: )
  • GML-Quellcode

    1. radtodeg(arctan(abs(x-40+obj_player.x)/point_distance(x-40,y,obj_player.x,obj_player.y)));


    Dort muss es heißen:

    GML-Quellcode

    1. radtodeg(arctan(abs(x-40-obj_player.x)/abs(y-obj_player.y)));

    Du brauchst als Gegenkathete (Strecke a) die Differenz beider X-Werte, nicht die Summe.

    EDIT:
    Tut mir leid, im Eifer des Gefechts ist mir noch etwas entscheidendes entgangen:
    Die Tangens-Funktion stellt außerdem den Quotienten aus Gegenkathete und Ankathete dar, bei dir ist das demzufolge die Differenz beider X-Werte und die Differenz beider Y-Werte. ;)

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Richlord ()

  • An point_direction habe ich gar nicht gedacht, mensch.
    Dass es auch Unterschiede in der Datei gibt liegt daran, dass ich durchgehend probiert habe. Da ich nun weiß dass es einfacher geht, brauch ich den Kram ohnehin nicht mehr.
    Also:

    GML-Quellcode

    1. winkel = point_direction(obj_player.x,obj_player.y,x-40,y);
    funktioniert super, aller besten Dank maxda!