Senkrechtes Spiegeln durch Polygon
Übersicht

KruemelatorBetreff: Senkrechtes Spiegeln durch Polygon |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich habe ein 3eckiges Polygon, wo mir jeweils die Korrdinaten der Eckpunkte bekannt sind. Dazu habe ich einen Punkt, auch mit Korrdinaten. Diesen möchte ich jetzt spiegeln, dass er auf der anderen Seite des Polygon ist.
Zu erst hatte ich versucht durch den Schwerpunkt zu spiegeln. Dies führte aber nicht zum gewünschten Ergebnis, da der gespiegelte Punkt nicht "senkrecht" auf dem Polygon stand. Ich hoffe ich habe mich verständlich ausgedrückt. Gruß Kruemelator |
||
![]() |
ChriseBetreff: Re: Senkrechtes Spiegeln durch Polygon |
![]() Antworten mit Zitat ![]() |
---|---|---|
senkrecht heißt ja in dem Fall nur y-Koordinaten verändern schätz ich mal, wenn ich dich da richtig verstehe, oder?
Errechne doch den Durchschnitt Y-wert der Polygonpunkte und Spiegle dann nur die Y-Koordinaten an dieser Y-Ebene. |
||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nein ich meine es anders.
Dein würde nur dann funktionieren wenn das Polygon nicht "geneigt" wäre. Die Entfernung vom gespiegelten Punkt und dem vorgegebenen Punkt zu einem beliebigen auf dem Polygon ist immer gleich größ. |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
hast du ein Bild, dass du als Beispiel zeigen könntest? Bzw. mit dem du das Problem verdeutlichen könntest? | ||
Llama 1 Llama 2 Llama 3
Vielen Dank an Pummelie, der mir auf seinem Server einen Platz für LlamaNet bietet. |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Könntest du vielleicht eine Skizze davon machen, was du meinst?
Eigentlich kann man Punkte nur an Geraden oder anderen Punkten spiegeln - an einem beliebigen Polygon geht nicht. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das rote ist das Polygon. P1 ist der gegebene Punkt, P2 der gesuchte. Gleich farbige Linien sind gleichlang. Die rechte Zeichnung ist eine andere Ansicht, aus der Sicht des schwarzen Pfeils. Bei der rechten Zeichnung ist das Polygon "waargrecht", es könnte aber auch geneigt sein, also z.B. B tiefer liegen als C. |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kennst du dich mit Vektoren aus?
Die grundlegende Vorgehensweise wäre: - aus den Punkten eine Ebene errechnen - gebundenen Normalenvektor der Ebene so verschieben und skalieren, dass er genau an P1 beginnt und auf der Ebene endet - Normalenvektor mit 2 multiplizieren - Endpunkt des Vektors = P2 Hilft dir das schon, oder möchtest du es noch genauer gezeigt haben? |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ehrlich gesagt nicht, bin erst 10. Klasse.
Wenn ich durch den Punkt auf dem Polygon, der P1 am nächsten ist, spiegel, dann erhalte ich auch die Korrdinaten von P2. Oder nicht? |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Achso, jetzt begreife ich es erst ![]() Das kann man durch ein wenig Vektorgeometrie und die Hessesche Normalform lösen: Code: [AUSKLAPPEN] Type TPoint
Field X#, Y#, Z# End Type P1.TPoint = New TPoint : P1\X# = 5 : P1\Y# = 9 : P1\Z# = 3 P2.TPoint = New TPoint : P2\X# = 5 : P2\Y# = 0 : P2\Z# = 3 P3.TPoint = New TPoint : P3\X# = 2 : P3\Y# = 0 : P3\Z# = 5 P4.TPoint = New TPoint : P4\X# = 7 : P4\Y# = 0 : P4\Z# = 7 MirrorPoint( P1, P2, P3, P4 ) Print "X: " + P1\X# + " Y: " + P1\Y# + " Z: " + P1\Z# WaitKey() End ; P1 wird gespiegelt, P2, P3 und P4 bilden das Dreieck Function MirrorPoint( P1.TPoint, P2.TPoint, P3.TPoint, P4.TPoint ) VectorX# = ( P3\Y# - P2\Y# )*( P4\Z# - P2\Z# ) - ( P3\Z# - P2\Z# )*( P4\Y# - P2\Y# ) VectorY# = ( P3\Z# - P2\Z# )*( P4\X# - P2\X# ) - ( P3\X# - P2\X# )*( P4\Z# - P2\Z# ) VectorZ# = ( P3\X# - P2\X# )*( P4\Y# - P2\Y# ) - ( P3\Y# - P2\Y# )*( P4\X# - P2\X# ) W# = -( VectorX#*P2\X# + VectorY#*P2\Y# + VectorZ#*P2\Z# ) D# = ( VectorX#*P1\X# + VectorY#*P1\Y# + VectorZ#*P1\Z# + W# )/Sqr( VectorX#*VectorX# + VectorY#*VectorY# + VectorZ#*VectorZ# ) TFormNormal VectorX#, VectorY#, VectorZ#, 0, 0 P1\X# = P1\X# - 2*D#*TFormedX() P1\Y# = P1\Y# - 2*D#*TFormedY() P1\Z# = P1\Z# - 2*D#*TFormedZ() End Function |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Kruemelator hat Folgendes geschrieben: Wenn ich durch den Punkt auf dem Polygon, der P1 am nächsten ist, spiegel, dann erhalte ich auch die Korrdinaten von P2. Oder nicht? Ja, nur müsstest du den ja erstmal finden.
Aber ich glaube, Noobody hat gerade schon umgesetzt, was ich meinte. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Code: [AUSKLAPPEN] - Normalenvektor mit 2 multiplizieren
Wenn ich da den Faktor 1 anstelle von 2 nehmen würde, dann würde ich doch auf dem Punkt landen, der P1 am nächsten ist, oder ihre ich mich da? Danke für die Hilfe, ich werde den Code nutzen. |
||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
So ginge es auch, aber ich habe das noch ein wenig anders gelöst, und zwar berechne ich den Abstand des Punktes von der Ebene - das geht sehr fix mit der Hesseschen Normalform.
Dann verschiebe ich den Punkt einfach um den Normalenvektor der Ebene, multipliziert mit dem zweifachen Abstand. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group