Nur die Kenntnis von zwei Punkten ein Rechteck, wie kann ich herausfinden, mit den anderen zwei?
Hey Leute, ich bin lernen processing.js und ich bin gekommen, über ein mathematisches problem, das ich kann nicht scheinen, um zu lösen, mit meiner begrenzten geometrie und Trigonometrie-Kenntnisse oder durch die Hilfe von Wikipedia.
Brauche ich, um ein Rechteck zu zeichnen. Zeichnen Sie das Rechteck, die ich brauche, um zu wissen, die Koordinaten-Punkte von jeder Ecke. Alles was ich weiß ist, x und y die Mittelpunkte der oberen und unteren Rand der box, und die Länge aller vier Seiten.
Es wird keine Garantie für die Ausrichtung der box.
Hilfe? Dies scheint, wie es sollte einfach sein, aber es ist wirklich guckten mich.
- Ich nehme meine Antwort zurück.. Das ist lösbar!
- Ich nehme es, dass dieser gedreht werden kann, in jedem Winkel und Sie nicht wissen, den Winkel?
- richtig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das viereck ist ein Rechteck (alle vier Winkel 90 Grad), dann kann es gelöst werden. (wenn es sein könnte, ein viereck, dann ist es nicht lösbar)
wenn die Punkte (x1,y1) und (x2, y2), und wenn die beiden Punkte nicht exakt senkrecht (x1 = x2) oder horizontal (y1 = y2), dann gilt für die Steigung einer Kante des Rechtecks ist
und die Steigung der anderen Kante ist:
Wenn Sie wissen, die Längen der Seiten und die Mittelpunkte von zwei gegenüberliegenden Seiten, dann die corrner Punkte sind leicht bestimmt, indem dx, dy zu der Mittelpunkte: (, wenn L die Länge der Seiten, die die Mittelpunkte sind)
und
HINWEIS: wenn die Punkte vertikal oder horizontal ausgerichtet werden, diese Technik wird nicht funktionieren, obwohl die offensichtliche Lösung für diese degenerativen Fällen ist viel einfacher.
x1 == x2
odery1 == y2
sonst wirst du am Ende der Division durch null. Das rechnen mit Vektoren anstelle von Pisten verhindert dies (obwohl Sie noch brauchen, um zu überprüfen, dass Ihre beiden Punkte sind nicht genau das gleiche).Wenn Sie wissen, dass Ihr viereck ist ein Rechteck, dann können Sie einige einfache Vektor-Mathematik zu finden, die Koordinaten der Ecken. Die knowns sind:
(x1,y1)
- Koordinate des Mittelpunkts in der oberen Zeile(x2,y2)
- Koordinate von dem Mittelpunkt auf der unteren Liniel1
- die Länge des oberen und unteren Linienl2
- die Länge der beiden anderen LinienErsten finden wir den Vektor zwischen den zwei bekannten Punkten. Dieser Vektor ist parallel zu der Seite Zeilen:
(vx, vy) = (x2 - x1, y2 - y1)
Müssen wir normieren diesen Vektor (D. H. der Länge 1), so können wir Sie später zu verwenden als eine basis finden Sie unsere Koordinaten.
vlen = sqrt(vx*vx + vy*vy)
(v1x, v1y) = (vx /vlen, vy /vlen)
Weiter, wir drehen diesen Vektor gegen den Uhrzeigersinn um 90 Grad. Der gedrehte Vektor parallel zu der oberen und unteren Linien. 90-Grad-Drehung stellt sich heraus, nur durch das vertauschen der Koordinaten und Sie zu negieren einer von Ihnen. Sie können sehen, dass dies nur indem Sie versuchen es auf dem Papier. Oder nehmen Sie an Blick am Gleichungen für das 2D Rotationen Ersatz und in 90 Grad.
(u1x, u1y) = (-v1y, v1x)
Nun haben wir genug Informationen zu finden, die 'top-left' - Ecke. Wir fangen einfach an unserer Stelle
(x1, y1)
und zurück bewegen, entlang Seite die Hälfte der Seite Länge:(p1x, p1y) = (x1 - u1x * l1 /2, y1 - u1y * l1 /2)
Von hier aus können wir die restlichen Punkte nur, indem Sie den entsprechenden vielfachen von unserer basis-Vektoren. Bei der Umsetzung dieses können Sie natürlich beschleunigen, indem Sie nur die Berechnung jedes der einzigartigen Multiplikation ein einziges mal:
(p2x, p2y) = (p1x + u1x * l1, p1y + u1y * l1)
(p3x, p3y) = (p1x + v1x * l2, p1y + v1y * l2)
(p4x, p4y) = (p3x + u1x * l1, p3y + u1y * l1)
Es ist definitiv ein Rechteck? Dann wissen Sie, die Orientierung der kurzen Seiten (Sie sind parallel zu der Linie zwischen den Punkten), und damit die Orientierung der Längsseiten.
Wissen Sie, die Ausrichtung und die Länge der langen Seiten, und Sie wissen, dass Ihre Mittelpunkte, so ist es unkompliziert zu finden, die Ecken von dort.
Umsetzung ist Links als übung für den Leser.
length/2
entfernt von diesem Punkt. Damit Ihr die Richtung kennt, und Sie kennen die Strecke ... was Sie sonst noch wissen müssen?Dies bedeutet, dass es zwei Linien parallel zu der Linie zwischen den beiden Punkten, die Sie haben. Holen Sie sich die Ecken durch die übersetzung der Zeile, die Sie haben 1/2 der Länge der oberen Seite in jede Richtung, die senkrecht zu der Linie, die Sie haben.
Wenn Sie wissen, der Mittelpunkt für den Anfang, und die Länge von der Spitze, dann wissen Sie, dass die y bleiben die gleichen für die beiden oberen Ecken, und das x wird der Mittelwert plus/minus der Breite des Rechtecks. Dies wird auch für den Boden.
Sobald Sie die vier Ecken, es gibt keine Notwendigkeit, über sorgen, die Seitenlängen, als die Punkte sind die gleichen wie diejenigen verwendet werden, für oben und unten.
Gibt es einen Unterschied zwischen einem "viereck" und ein "Rechteck".
Wenn Sie den Mittelpunkt der oberen und unteren, und die Seiten Längen, der rest ist einfach.
Gegeben:
und top/bottom Länge zusammen mit rechts/Links Länge.
x1 = top_middle_x - top/bottom_length /2;
x2 = x1 + top/bottom_length;
y1 = top_middle_y
y2 = bottom_middle_y
Offensichtlich, das ist der einfachste Fall und unter der Annahme, dass die Leitung der (tmx, tmy) (bmx, bmy) ist lediglich entlang der Y-Achse.
Wir nennen diese Linie die "mittlere Linie".
Den nächsten trick ist, nehmen Sie die Mitte der Linie, und berechnen Sie die Rotations-offset-ausschalten der Y-Achse.
Nun, meine trig ist super rostig.
dx = tmx - bmx, dy = tmy - bmy.
So, der Tangens des Winkels ist dy /dx. Der Arkustangens(dy /dx) ist der Winkel der Linie.
Aus, dass Sie Ihre Orientierung.
(Geist, es gibt einige Spiele mit Quadranten und Zeichen und Zeug zu bekommen, das stimmt-aber das ist der Kern von ihm.)
Haben Sie erst einmal die Orientierung, Sie können "drehen" die Linie zurück zu der Y-Achse. Blick von 2D-Grafiken für die Mathematik, es ist straight forward.
Bekommt Sie Ihre normale Ausrichtung. Dann berechnen Sie die Rechtecke, Punkte, in dieser neuen normalen form, und schließlich, drehen Sie Sie zurück.
Viola. Rechteck.
Andere Dinge, die Sie tun können, ist "drehen" einer Linie, die die Hälfte der Länge der "top-Linie", wo es 90 Grad von der Mitte der Linie. Also, sagen wir, Sie haben Mitte der Linie, die 45 Grad. Starten Sie diese Zeile auf tmx, tmy, und drehen Sie diese Zeile 135 Grad (90 + 45). Dieser Punkt würde Eure "oben-Links" - Ecke. Drehen -45 (45 - 90), um die "rechts oben" zeigen. Dann tun Sie etwas ähnliches mit der unteren Punkte.
Berechnen Sie den Winkel von der Verbindungslinie der beiden Mittelpunkte mit einem arc-Tangens-Funktion angewendet auf den Vektor, den Sie bekommen zwischen Ihnen.
Subtrahieren 90 Grad Winkel, um die Richtung der oberen Kante
Ausgehend von der top-center-point, move relative (1/2 top Breite x sin(Winkel), 1/2 oben: Breite x cos(Winkel)) - das bekommt der oberen rechten Ecke zeigen.
Weiter um das Rechteck über den sin und cos der Winkel und die Breite als angemessen
Als test: Überprüfen Sie machte es zurück zum Ausgangspunkt