Koordinatendrehung < Matrizen < Lineare Algebra < Hochschule < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 12:03 Mo 14.03.2011 | Autor: | wschbr |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo, ich möchte gerne ein Polygon mit geografischen Koordinaten um den Mittelpunkt drehen. Folgende 4 Beispielpunkte ergeben ein Quadrat mit einer Kantenlänge von etwa 500m. Damit habe ich alle Berechnungen durchgeführt.
52.271160 Lat 9.118016 Lon
52.271160 Lat 9.125402 Lon
52.266666 Lat 9.125384 Lon
52.266699 lat 9.118071 Lon
Mein Lösung dazu mit C++:
Zuerst Berechnung des Mittelpunkts des Polygons:
Alle Punkte aufsummieren und durch Anzahhl der Punkte dividieren.
for (int i = 0; i < AnzahlPunkte; i++)
{
centerLat += polygonpunkt()[i]->lat();
centerLon += polygonpunkt()[i]->lon();
}
centerLat /= numWp;
centerLon /= numWp;
Nun bei jeden Polygonpunkt einzeln den Mittelpunkt für eine Nullpunktverschiebung abziehen und anschließend über eine einfache Drehmatrix drehen.
for (int j = 0; j < numWp; j++)
{
x = polygonpunkt()[j]->lon();
y = polygonpunkt()[j]->lat();
x -= centerLon;
y -= centerLat;
xLon = x*cos(angleRad) - y*sin(angleRad);
yLat = y*cos(angleRad) + x*sin(angleRad);
}
Das wars auch schon. Leider funktioniert dies nur bei einer 180° Drehung, ansosten erhalte ich nach Drehung eine Verzerrung des Quadrates. Was mache ich falsch? Darf man eine solche Drehmatrix vielleicht nicht einfach auf geografische Koordinaten anwenden? Bei kleinen Entfernunen kann ich doch die Kugeloberfläche der Erde vernachlässigen oder?
Vielen Dank für eure Hilfe!
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 12:21 Mo 14.03.2011 | Autor: | ullim |
Hi,
wenn ich das richtig verstehe möchtest Du ein Polygonzug auf der Erdoberfläche, beschrieben durch Lat, Long, drehen. Ich würde dazu die kartesischen Koordinaten auf der Erdoberfläche ausrechnen, ein kartesisches Koordinatensystem in den Mittelpunkt des Polygon legen (auf der Erdoberfläche) und dann drehen und anschließend die neuen Koordinaten wieder in Lat, Long umrechnen.
Du drehst in Deiner Routine aber Winkel (Lat, Long) wenn ich das richtig sehe.
|
|
|
|