Gibt es in Matlab eine Funktion mit der man Orthodrome (kürzeste Verbindung zwischen 2 Punkten auf einer Kugeloberfläche) berechnen kann?
http://de.wikipedia.org/wiki/Orthodrome
Mein Problem, ich habe auf einer Einheitskugel verschiedene Punkte mittels Winkelangaben (Azimuth und Elevation - vom Kugelmittelpunkt aus) gegeben.
A(theta,phi), B(theta,phi), ...
Nun würde ich gerne jeweils die Winkel über Orthodrome von einem Punkt zum nächsten auf der Kugel interpolieren.
Vielleicht weiß hier wer eine Funktion oder hat eine Idee wie man sowas bewerkstelligen kann.
Ich habe im Netz eine Seite (https://users.cs.jmu.edu/bernstdh/w.....le-distance_spherical.php) gefunden mit einer Formel zur Berechnung der Distanz auf einer Kugel von einem Punkt zu einem zweiten Punkt, mit Hilfe des Azimuth und Elevationswinkel (theta, phi). Das hilft mir jetzt schon etwas.
Im letzten Bild auf dieser Seite sieht man den eingezeichneten Weg von Punkt p nach Punkt q auf der Kugeloberfläche. Ich möchte nun meine Winkel theta und phi so interpolieren, dass ich von einem Punkt zum nächsten wandere auf der Kugeloberfläche.
Wäre für jede Idde dankbar, bin momentan etwas ratlos.
Habe hier mal was gebastelt was vielleicht schon in die Richtung geht.
2 Punkte auf einer Kugel:
p(theta,phi,radius)=p(3,0.1,1)
q(theta,phi,radius)=q(1,1.2,1)
Code:
% Winkelkoordinaten zu den Punkten
theta=[3,3,3,3,3,3,3,3,3,3,3,3,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1];
phi=[0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,0.1,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2,1.2];
Nach ein paar Samples (hier 14) Sprung zum nächsten Punkt. Möchte nun vor dem "Sprung" die Winkel so interpolieren, dass kein harter Übergang ist, sondern der kürzeste Weg vom ersten Punkt zum zweiten Punkt genommen wird.
Habe es mal so probiert:
Code:
% Glättung vor dem "Sprung"
pfil=filtfilt(ones(1,5)/5,1,phi);
tfil=filtfilt(ones(1,5)/5,1,theta);
Leider habe ich hier jetzt nicht viel Feedback bekommen...
Nach vielen Überlegungen und viel herum experimentieren habe ich nun einen weg gefunden.
Poste meine Lösung falls es wen interessiert oder es auch mal wer benötigt.
Code:
% % kürzester Weg auf Kugeloberfläche - Orthodrome % % Azimuth und Elevation Interpolation
% Länge des kürzesten Weges zwischen 2 Punkte auf Kugel
alpha = acos((cos(p(1))*cos(t(1)))*(cos(p(2))*cos(t(2)))+(cos(p(1))*sin(t(1)))*(cos(p(2))*sin(t(2)))+(sin(p(1)))*(sin(p(2))));
% Umwandlung Kugelkoordinaten in kartesische Koordinaten [xa ya za] = sph2cart(t(1),p(1),1);
[xb yb zb] = sph2cart(t(2),p(2),1);
% Punkte in kart. Koord.
a = [xa ya za];
b = [xb yb zb];
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.