Abstand vom Mittelpunkt eines Rechtecks bestimmen

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

    • Abstand vom Mittelpunkt eines Rechtecks bestimmen

      Hi!
      Ich hätte wieder eine Frage an die Mathe experten hier im Forum. (Ich bin ein lausiger Mathematiker...)
      Ich habe da ein kleines Bild gezeichnet:


      Ich habe ein Rechteck mit einer gegebenen höhe und breite. Dieses kann auch noch in einem bestimmten winkel rotiert worden sein.
      Gleichzeitig ist auch noch ein Spieler Objekt zu sehen 8 grüner kreis.)

      Die Gelbe linie ist der Abstand zwischen dem Spieler objekt, und dem Rechtecksmittelpunkt. (roter punkt)
      Was ich möchte, ist den Abstand vom Rechtecks mittelpunkt bis zum Rand des jeweilige Rechteckes berechnen. Gekennzeichnet habe ich dies mit einer blauen linie.
      Kurzgesagt: Ich möchte die länge des blauen Pfades wissen. Weiss aber nicht so ganz wie ich das anstellen soll. Ich bin gerade am durchstöbern der Trigonometrie, aber was wirklich sinnvolles ist mir bis jetzt nicht eingefallen.

      Der Hintergedanke ist der, dass die Orangene linie vom Spieler bis zu mMittelpunkt des Objektes führt. Ich kann mir die länge mit point_distance leicht errechnen.
      Nun möchte ich vo ndieser länge, die länge des blauen pfades auf der Skizze subtrahieren, um zu schauen wie lang der Weg vom Spieler bis zum eintritt in die Fläche des Rechteckes ist.

      Hoffe jemand weiss einen guten Ansatz wie man das berechnen könnte.
    • Ich hab' dir mal ein Beispiel gemacht. Das eine Script dort sollte genau das berechnen, was du brauchst.

      EDIT: Habe das Script jetzt nicht weiter kommentiert. Falls du noch wissen willst, wie es mathematisch gesehen funktioniert, sag Bescheid. Dann mach ich noch ein Bild.
      Dateien

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Bl@ckSp@rk ()

    • Mir fallen spontan 2 Ansätze ein (ich gehe davon aus, dass du alles außer der länge der Linie weißt).

      Der erste wäre, dass du die Linie vom Spieler zum Mittelpunkt auf die Schnittpunkte mit den Seiten vom Rechteck überprüfst. Mit point_distance() kann man ja dann problemlos den Abstand vom Spieler zum Rechteck berechnen.
      Zum Berechnen von Schnittpunkten zweier Linien hab ich zum Beispiel das gefunden, aber jetzt nicht komplett durchgelesen.

      Mir kam allerdings noch ein 2ter Gedanke, der evtl. einfacher umzusetzen ist. Dazu muss ichs aber erst selbst proggen, ich wollt ihn gerade beschreiben, da ist mir aufgefallen, dass es ziemlich kompliziert klingt, wobei es wahrscheinlich weniger Code ist.

      Ich editiers einfach hier dazu, wenn ich fertig bin


      Okey, da war einer schneller ;)
    • Mal ne schnelle (mathematische) Lösung von mir:

      Mittelpunkt des Rechtecks
      x = (x1 + x2 + x3 + x4) / 4
      y = (y1 + y2 + y3 + y4) / 4

      Schnittpunkt mit der Methode von Chaos Creator herausfinden:

      Chaos Creator schrieb:

      Zum Berechnen von Schnittpunkten zweier Linien hab ich zum Beispiel das gefunden, aber jetzt nicht komplett durchgelesen.
      Sprich: Funktionen der Gerade zwischen Mittelpunkt und Spieler und den 4 Geraden durch die Eckpunkte gleich setzen.

      Länge anhand Pythagoras (a² + b² = c²) zwischen Mittelpunkt und Schnittpunkt ermitteln.
      "Es gibt nie ein glückliches Ende, denn es endet nichts." - Schmendrick
    • Hier noch eine Lösung mit dem Tangens:

      GML-Quellcode

      1. //arg0 = x
      2. //arg1 = y
      3. //arg2 = width
      4. //arg3 = height
      5. //arg4 = rot
      6. //arg5 = point_x
      7. //arg6 = point_y
      8. var proportion_dir, point_dir;
      9. point_dir = abs(degtorad((point_direction(argument0,argument1,argument5,argument6)-argument4)) mod (pi*2));
      10. proportion_dir = arctan(argument3/argument2);
      11. if((proportion_dir > point_dir or pi*2-proportion_dir < point_dir) or (pi+proportion_dir > point_dir and pi-proportion_dir < point_dir))
      12. return(sqrt(sqr(tan(point_dir)*argument2/2)+sqr(argument2/2)));
      13. else
      14. return(sqrt(sqr(tan(pi/2-point_dir)*argument3/2)+sqr(argument3/2)));
      Alles anzeigen


      [EDIT]: Mit dieser Funktion ist mein neues Profilbild entstanden.

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