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

Volumendaten - Abstand zwischen zwei Flächen

 

Premutos
Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.05.2015, 14:29     Titel: Volumendaten - Abstand zwischen zwei Flächen
  Antworten mit Zitat      
Moin Community

Ich habe 2 Volumendatensätze, im Grunde sind es zwei Flächen, optisch ähnlich einem Teppich, die übereinander im Raum liegen. Die beiden Flächen sind jeweils leicht wellig. Mich interessiert der Abstand der beiden Flächen zu einander.
Noch zur Info. Die obere Fläche ist in konstant aufgeteilte x und y Koordinaten eingeteilt. Auf Grund von Brechungseffekten ist das bei der unten liegenden Fläche nicht der Fall. Dort sind die Abstände der x und y Koordinaten immer unterschidlich. Für die z Koordinaten ist das bei beiden der Fall. Die Verteilung der z Koordinaten ist beliebig, folgt also keinenm Muster.
Die Koordinaten stehen für beide Flächen jeweils in 3 Matrizen für jede Koordinate (x, y und z). Insgesamt also 6 Matritzen. 2 für x, 2 für y und 2 für z. (Siehe Code). Die Testmatrizen im Code sind stark reduziert, da die original Matrizen 1500x2000 gross sind.

Mich interessiert jetzt der Abstand von jeder x/y Position der oberen Fläche zur naheliegendsten x/y Position der unteren Fläche. Da ich noch nicht als zu lange mit matlab arbeite, ist die Frage, ob es eine Funktion gibt die dies bewerkstelligt. Ich habe jetzt so auf anhieb keine Lösungsidee.

Code:

% obere Fläche
ox = [1 2 3 4 5 6; 1 2 3 4 5 6;1 2 3 4 5 6; 1 2 3 4 5 6];
oy = [1.5 1.5 1.5 1.5 1.5 1.5;
      2.5 2.5 2.5 2.5 2.5 2.5;
      3.5 3.5 3.5 3.5 3.5 3.5;
      4.5 4.5 4.5 4.5 4.5 4.5];
oz = [2.54 2.46 2.52 2.45 2.53 2.59;
      2.56 2.47 2.53 2.45 2.57 2.53;
      2.54 2.43 2.51 2.42 2.55 2.56;
      2.55 2.44 2.56 2.44 2.53 2.57;];
% untere Fläche
ux = [1.1 2.2 3.1 4.1 5.2 5.9;
      1.1 2.1 3.2 4.1 4.9 6.0;
      1.0 2.1 3.2 4.2 5.1 6.1;
      1.2 2.0 3.0 3.9 5.0 6.2];
uy = [1.3 1.4 1.5 1.6 1.4 1.5;
      2.5 2.4 2.3 2.6 2.5 2.7;
      3.4 3.5 3.3 3.6 3.7 3.5;
      4.4 4.3 4.5 4.6 4.5 4.7];
uz = [0.51 0.48 0.50 0.48 0.52 0.51;
      0.52 0.49 0.52 0.49 0.51 0.52;
      0.51 0.48 0.51 0.49 0.52 0.51;
      0.50 0.49 0.52 0.48 0.51 0.52;];
 
  % Plot als Surf
  figure
  surf(ox,oy,oz)
  hold on
  surf (ux,uy,uz)
  hold off
 


Tausend Dank im Voraus! Smile

Gruss,
P.
Private Nachricht senden Benutzer-Profile anzeigen


kojoteKarl
Forum-Anfänger

Forum-Anfänger


Beiträge: 27
Anmeldedatum: 23.05.15
Wohnort: Freiberg
Version: R2013
     Beitrag Verfasst am: 30.05.2015, 11:46     Titel:
  Antworten mit Zitat      
Also wenn ich das richtig sehe, hast du ja immer genau so viele xy für oben wie für unten. Dann ist doch letztendlich der Abstand nur die Differenz, der z-Werte und das kannst du ja über eine Doppelschleife lösen.

Code:


% obere Fläche
ox = [1 2 3 4 5 6; 1 2 3 4 5 6;1 2 3 4 5 6; 1 2 3 4 5 6];
oy = [1.5 1.5 1.5 1.5 1.5 1.5;
      2.5 2.5 2.5 2.5 2.5 2.5;
      3.5 3.5 3.5 3.5 3.5 3.5;
      4.5 4.5 4.5 4.5 4.5 4.5];
oz = [2.54 2.46 2.52 2.45 2.53 2.59;
      2.56 2.47 2.53 2.45 2.57 2.53;
      2.54 2.43 2.51 2.42 2.55 2.56;
      2.55 2.44 2.56 2.44 2.53 2.57;];
% untere Fläche
ux = [1.1 2.2 3.1 4.1 5.2 5.9;
      1.1 2.1 3.2 4.1 4.9 6.0;
      1.0 2.1 3.2 4.2 5.1 6.1;
      1.2 2.0 3.0 3.9 5.0 6.2];
uy = [1.3 1.4 1.5 1.6 1.4 1.5;
      2.5 2.4 2.3 2.6 2.5 2.7;
      3.4 3.5 3.3 3.6 3.7 3.5;
      4.4 4.3 4.5 4.6 4.5 4.7];
uz = [0.51 0.48 0.50 0.48 0.52 0.51;
      0.52 0.49 0.52 0.49 0.51 0.52;
      0.51 0.48 0.51 0.49 0.52 0.51;
      0.50 0.49 0.52 0.48 0.51 0.52;];
  Bb = size(uz)
 
 for i = 1:Bb(1,2);
     for j = 1:Bb(1,1);
     abst=oz(j,i)-uz(j,i)
     end
 end
 
  % Plot als Surf
  figure
  surf(ox,oy,oz)
  hold on
  surf (ux,uy,uz)
  hold off


Ich hab dein Text mal etwas modifiziert. So wird an jeder gleichen Stelle für x und y der z-Wert berechnet.

MfG
kojo
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 30.05.2015, 13:26     Titel:
  Antworten mit Zitat      
Zitat:
for i = 1:Bb(1,2);
for j = 1:Bb(1,1);
abst=oz(j,i)-uz(j,i)
end
end

hmm da hat sich ein kleiner tippfehler eingeschlichen. du hast vergessen bei abst den index mit reinzubauen. aber mann kann das auch ohne schleife machen mit oz-uz. aber das ist dann nur der vertikale abstand in z richtung und nicht zum naheliegensten punkt.
bei kleinen arrays könnte ich mir vorstellen einfach für jeden punkt aus einer fläche alle abstände zur anderen fläche zu berechnen. und dann immer den kleinsten zu nehmen. wobei das recht schnell sehr umfangreich werden kann wenn die flächen viele punkte haben.
irgenwie so
Code:
dim=size(ox);
 abst=zeros(dim);
 for ii=1:dim(1)
     for jj=1:dim(2)
         abst(ii,jj)=min(min(sqrt((ox(ii,jj)-ux).^2+(oy(ii,jj)-uy).^2+(oz(ii,jj)-uz).^2)));
     end
 end

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 30.05.2015, 15:42     Titel:
  Antworten mit Zitat      
Hallo,

Noch ein genereller Tipp zur Effizienz:
Code:
% Statt:
abst(ii,jj)=min(min(sqrt((ox(ii,jj)-ux).^2+(oy(ii,jj)-uy).^2+(oz(ii,jj)-uz).^2)));

% spart dies die Berechnung vieler teurer Wurzeln:
abst(ii,jj)=sqrt(min(min((ox(ii,jj)-ux).^2+(oy(ii,jj)-uy).^2+(oz(ii,jj)-uz).^2)));
 

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 31.05.2015, 21:29     Titel:
  Antworten mit Zitat      
oh ja das stimmt natürlich Smile wieder ein ansatz punkt zur beschleunigung gelernt. danke jan. man denkt als leihe immer nicht direkt dran Smile
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 01.06.2015, 01:24     Titel:
  Antworten mit Zitat      
Hallo Winkow,

:-) Als Laie gehst Du hier im Forum aber nicht durch.

Wenn es nur um ein paar Millionen Zahlen geht ist es nicht so wichtig, ob man sich die überflüssigen Wurzeln spart. Aber es ist eine gute Idee beim Programmieren immer auch an wirklich große Arrays zu denken.

Neben SQRT sind auch EXP und POWER teuer. Wann immer diese Befehle auftauchen lohnt es sich genau hinzuschauen, ob sie vermieden werden können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Premutos
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 16
Anmeldedatum: 29.05.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2015, 20:23     Titel:
  Antworten mit Zitat      
Sauber Danke !!
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.