WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Orthodrome

 

hosti
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.10.2010, 14:47     Titel: Orthodrome
  Antworten mit Zitat      
Hallo Leute!

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.

Danke für die Hilfe.

lg
hosti
Private Nachricht senden Benutzer-Profile anzeigen


hosti
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2010, 17:24     Titel:
  Antworten mit Zitat      
Hallo!

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.

lg
hosti
Private Nachricht senden Benutzer-Profile anzeigen
 
hosti
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2010, 18:41     Titel:
  Antworten mit Zitat      
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);

pint=zeros(size(pfil));
tint=zeros(size(pfil));
pint(1:end-4)=pfil(5:end);
tint(1:end-4)=tfil(5:end);

% löschen der Nullen
pint(pint==0)=[];
tint(tint==0)=[];

figure, plot(phi)
hold on
plot(pint,'r')

figure, plot(theta)
hold on
plot(tint,'r')

figure
for m=1:length(pint)
    [xm,ym,zm]=sph2cart(-tint(m),-pint(m),1);
    scatter3(xm,ym,zm,100,'k','filled');
    hold on
end
[Xkugel,Ykugel,Zkugel] = sphere;
h = mesh(Xkugel,Ykugel,Zkugel);
set(h,'FaceAlpha',0);
axis image
hold off
xlabel('X-axis')
ylabel('Y-axis')
zlabel('Z-axis')
view(45,45)
 


Nach dem Kugelplot zu interpretieren bekomme ich hier aber nicht den kürzesten Weg (Orthodrom) von einem Punkt zum nächsten.

lg
hosti
Private Nachricht senden Benutzer-Profile anzeigen
 
hosti
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 08.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2010, 14:13     Titel:
  Antworten mit Zitat      
Hallo!

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

% for testing
t=[-1.8323 0.2072];  % theta (Azimuth) Eingang
p=[0.522 0.3508];  % phi (Elevation) Eingang

% 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];

% Kreuzprodukt
n = cross(a,b);

% ortho. Basis
a1 = a/norm(a);
b1 = cross(n,a)/norm(cross(n,a));

% Timeindex auf Orthodrome
ti = 0.15:0.15:alpha;

% Berechnug der Koordinaten entlang der Orthodrome
X = zeros(length(ti),3);
for k = 1:length(ti)
    X(k,:) = a1*cos(ti(k))+b1*sin(ti(k));
end

% Rückwandlung in Kugelkoordinaten
theta = zeros(1,size(X,1));
phi = zeros(1,size(X,1));
r = zeros(1,size(X,1));
for m = 1:size(X,1)
    [th,ph,ra] = cart2sph(X(m,1),X(m,2),X(m,3));
    theta(m) = th;
    phi(m) = ph;
    r(m) = ra;
end


% Grafik
figure
[x1,y1,z1]=sph2cart(t(1),p(1),1);
scatter3(x1,y1,z1,100,'k','filled');
hold on
[x2,y2,z2]=sph2cart(t(2),p(2),1);
scatter3(x2,y2,z2,100,'r','filled');
hold on
[xn,yn,zn]=sph2cart(theta,phi,r);
scatter3(xn,yn,zn,100,'g','filled');
hold on
[Xkugel,Ykugel,Zkugel] = sphere;
h = mesh(Xkugel,Ykugel,Zkugel);
set(h,'FaceAlpha',0);
axis image
hold off
xlabel('X-axis')
ylabel('Y-axis')
zlabel('Z-axis')
view(45,45)

 


lg
hosti
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.