NeoGriever: Ovalenradius errechnen (Kompliziert zu erklären ...)

Hallo.

Es geht um PHP. Bezüglich mathematischer berechnungen.

Hier erstmal eine kurze Illustration.

http://n47.imgup.net/ovaleba2e.png

Die rote Ovale ist "gedanklich" da und wird auf basis von Breite und Höhe der "Arbeitsfläche" errechnet.

Die grüne Linie zeigt (beispielhaft) die errechnete Distanz zwischen einem (zufälligen) punkt auf der Arbeitsfläche und dem Zentrum. (Auch fließkomma möglich)

Das lila X zeigt den Schwellwert, welchen ich errechnen möchte.

Ein Beispiel in Zahlen:

Dimensionen der Arbeitsfläche (B / H): 100 / 80 Zentrum der Arbeitsfläche (X / Y): 50 / 40 Position des Punktes auf der Arbeitsfläche (X / Y): 22 / 2 Die gedankliche Ovale nutzt das Zentrum der Arbeitsfläche als Zentrum und die Dimensionen der Arbeitsfläche als Dimensionen. (Siehe Illustration)

Der Punkt ist nun eindeutig außerhalb der (gedanklichen) Ovale. Jedoch möchte ich errechnen, ob die Distanz des Punktes zum Zentrum der Arbeitsfläche außerhalb der Ovale liegt. (Zentrum der Arbeitsfläche ist IMMER gleich Zentrum der Ovale)

Ich weiß, dass man da mit Sin und Cos rumjonglieren muss. Aber da komm ich nicht mehr weiter.

Wer könnte mir da eventuell helfen, das Problem zu lösen?

PS: Es geht um einen PHP-basierenden Sternenkarten-Renderer, welchen ich mit einer "Radial"-Option versehen will, wobei dann am ende nur die Sterne generiert und gespeichert werden, welche sich innerhalb der Ovale/des Kreises des Bildes befinden. Dabei wird die Größe des Bildes als Ovalen/kreis-Dimensionen gewählt.

  1. Yo!

    Die rote Ovale ist “gedanklich” da und wird auf basis von Breite und Höhe der “Arbeitsfläche” errechnet.

    Nenne das Ding statt einem Oval eine Ellipse.

    Der Punkt ist nun eindeutig außerhalb der (gedanklichen) Ovale. Jedoch möchte ich errechnen, ob die Distanz des Punktes zum Zentrum der Arbeitsfläche außerhalb der Ovale liegt. (Zentrum der Arbeitsfläche ist IMMER gleich Zentrum der Ovale)

    Dann berechnest du den Winkel der Gerade vom Ursprung zum Punkt …

    Ich weiß, dass man da mit Sin und Cos rumjonglieren muss. Aber da komm ich nicht mehr weiter.

    … und berechnest mit diesem Winkel den Schnittpunkt mit der Ellipse.

    https://www.google.de/search?q=punkt+auf+ellipse+auf+basis+von+winkel

    MfG ChrisB

    1. Leider ist das nicht das, was ich möchte. Ich möchte nur erfahren, ob der punkt außerhalb der ellipse oder innerhalb ist.

      Mit der errechnung des Schnittpunktes würde ich ja nicht erfahren, ob der Punkt außerhalb oder innerhalb liegt.

      Nun gut. Man könnte jetzt die Distanz zwischen Punkt und Zentrum mit der von Punkt und Schnittpunkt dividieren, wodurch man einen Wert bekommt. Ist dieser > 0 dann ist der Punkt außerhalb. Ist er < 0 ist er innerhalb.

      Vielleicht versuche ich das, insofern es keinen anderen Ansatz gibt.

      1. Yo!

        Mit der errechnung des Schnittpunktes würde ich ja nicht erfahren, ob der Punkt außerhalb oder innerhalb liegt.

        Nun gut. Man könnte jetzt die Distanz zwischen Punkt und Zentrum mit der von Punkt und Schnittpunkt dividieren, wodurch man einen Wert bekommt. Ist dieser > 0 dann ist der Punkt außerhalb. Ist er < 0 ist er innerhalb.

        Oder einfach die Längen beider Strecken vergleichen, ja. Dass du diesen Schritt noch machen muss, war impliziert.

        MfG ChrisB

  2. Hallo,

    mit deinem Zentrum deiner Ellipse kannst du nicht wirklich was anfangen. Was du brauchst sind die beiden Brennpunkte. Die Summe der beiden Abstände eines Punktes auf der Ellipse zu den Brennpunkten ist eine Konstante k. Damit hast du ein simples Kriterium: größer als k -> außerhalb, kleiner k -> innerhalb

    Gruß Kalk

  3. Ich weiß, dass man da mit Sin und Cos rumjonglieren muss.

    Nein, musst du nicht. Das einzige, was du brauchst, ist der Pythagoras.

    Und das Wissen, was eine Ellipse (ich nehme mal an, das meinst du mit „Oval“) ist: die Menge aller Punkte der Ebene, für die die Summe der Abstände zu zwei gegebenen Punkten _F_₁ und _F_₂ konstant ist.

    Ellipse

    (Quelle: Antonsusi, Wikimedia, CC BY 3.0)

    Die Länge der großen Halbachse (Abstand der am weitesten entferntesten Punkte der Ellipse zum Mittelpunkt) sei a; die Länge der kleinen Halbachse (Abstand der am nächsten liegenden Punkte der Ellipse zum Mittelpunkt) sei b. (Das Rechteck, in das die Ellipse eingebettet ist, hat also die Breite 2⁠_a_ und die Höhe 2⁠_b_.

    Wie man leicht sieht, ist die oben erwähnte Summe der Abstände gleich 2⁠_a_.

    Der Abstand der Brennpunkte vom Mittelpunkt sei e. Nach Pythagoras gilt _a_² = _b_² + _e_². Damit lassen sich die Koordinaten der Brennpunkte _F_₁(e, 0) und F_₂(−_e, 0) aus den Abmessungen des Rechtecks berechnen.

    Der Abstand d zweier Punkte _P_₁(_x_₁, _y_₁) und _P_₂(_x_₂, _y_₂) einer Ebene ergibt sich ebenfalls aus dem Pythagoras: _d_² = (_x_₁ − _x_₂)² + (_y_₁ − _y_₂)².

    Nun kannst du die Abstände eines fraglichen Punktes von den Brennpunkten berechnen. Ist deren Summe gleich 2⁠_a_, liegt der Punkt auf der Ellipse; ist sie kleiner, liegt er innerhalb; ist sie größer, liegt er außerhalb.

    LLAP

    --
    „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
    1. Wie man leicht sieht, ist die oben erwähnte Summe der Abstände gleich 2⁠_a_.

      Das sieht man leicht bei _S_₂_F_₁ + _S_₂_F_₂.

      Der Abstand der Brennpunkte vom Mittelpunkt sei e. Nach Pythagoras gilt _a_² = _b_² + _e_². Damit lassen sich die Koordinaten der Brennpunkte _F_₁(e, 0) und F_₂(−_e, 0) aus den Abmessungen des Rechtecks berechnen.

      Dabei bin ich o.B.d.A. davon ausgegangen, dass das Rechteck breiter als hoch ist. Andernfalls liegen die Brennpunkte auf der y-Achse.

      LLAP

      --
      „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
      1. Ich glaube, ich stelle mal das Script, was ich gebastelt habe, hier rein.

        Source meines Sternengenerator-Scriptes

        Mein ziel ist: alles außerhalb der Ellipse einfach nicht zu zeichnen.

        Später sollen die Sterne auch zwischengespeichert werden, sodass ich mit den Positionen arbeiten kann.

        Leider verstehe ich von den Kram, welches du mir bisher geschickt hast, nicht wirklich viel und blicke wenig durch. Mir ist es leider nicht so möglich, das in PHP umzusetzen. (Wenn ichs dann aber hab, versteh ichs auch. Der sogenannte AHA-Effekt).

        Schau dir bitte mal das Script an und gib mir einfach mal ein Beispiel dafür, wenn es keine großen Umstände macht.

    2. Hallo

      hier mal zwei Links zum Thema:

      Elipsengleichung in Wikipedia

      Herausfinden, ob ein Punkt in einer Ellipse liegt

      Gruß Jürgen

      1. Uups, an der falsche Stelle geantwortet, aber das lerne ich auch noch.

        Gruß Jürgen

      2. Danke :) GENAU so wollt ich das haben. Mit javascript und solch verständlichen formeln kann ich umgehen.

        Danke vielmals. Das hat somit mein Problem gelöst. :)

      3. $px = $stern[0];
        $py = $stern[1];
        $inside_ellipsoid = ((pow($px - $cx,2) / pow($rx,2)) + (pow($py - $cy,2) / pow($ry,2)) <= 1);
        

        Dies ist der Part, welcher mir nun zurückgibt, ob der Punkt innerhalb oder außerhalb einer Ellipse liegt.

        $cx und $cy sind die Koordinaten des Zentrums. $rx und $ry sind die radien des ellipsoids.

        Und schon hab ichs :) Funktioniert prima.

        Hier ein paar Beispiele für die Ergebnisse (Ich habe noch ein "Padding"-Wert eingerechnet in $rx und $ry.)

        Beispiel 1 Beispiel 2

        Danke nochmals :)