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

Punkte auf naheliegende Gitterpunkte verschieben

 

PunktaufGitter

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2018, 17:30     Titel: Punkte auf naheliegende Gitterpunkte verschieben
  Antworten mit Zitat      
Hallo,

ich habe Punkte (x,y,z), die verteilt im Raum liegen. Nun möchte ich diese auf ein von mir vorgegebenes dreidimensionales Gitter liegen. Hier sind x-y-Koordianten in Gitter_kart (:,1) und Gitter_kart(:,2) gegeben. Die z-Koordinate ist ein seperater Vektor. Jeder Punkt soll nun auf den naheliegensten Gitterpunkt verschoben werden.
Momentan habe ich diesen Ansatz:
Jeder Punkt wird einzeln betrachtet. Zunächst erfolgt die Eingrenzung in den Quadranten (x,y). Dann das Folgende

Code:

for pp = 1:1:p   % über alle Punkte im Raum, die auf Gitter verschoben werden sollen
     for kk = 1:1:k   % über alle Gitterpunkte
          [~,oo] = min(abs(z-Punkt(mm,3,pp)));   % Z-Koordinate wird separat ermittelt
                 if norm(Punkt(mm,:,pp) - [Gitter_kart(kk,1) Gitter_kart(kk,2) z(oo)]) < d
                    d = norm(Punkt(mm,:,pp) - [Gitter_kart(kk,1) Gitter_kart(kk,2) z(oo)]);
                    Punkt_verschoben(mm,:,pp) = [Gitter_kart(kk,1) Gitter_kart(kk,2) z(oo)];
                 end
      end
end
 



Dann verbleibt der alte Punkt und ein Gitterpunkt mit unbekannten x und y-Koordinaten, aber bekannten z.
Dann folgt eine Schleife, die den Abstand aller Gitterpunkte (x-unbekannt, y-unbekannt, z-bekannt) zum zu verschiebenden Punkt berechnet. Ist der Abstand geringer, als mit dem vorherigen Punkt, so wird der Gitterpunkt überschrieben. Schlussendlich bleibt der Gitterpunkt in "Punkt_verschoben" stehen, der den geringsten Abstand aufweist.

In der Tat funktioniert diese Vorgehensweise sehr gut.
ABER: je nach Anzahl der Punkte und Gitterpunkte dauert dies Ewigkeiten.
Wie könnte man das effizienter gestalten?

Vielen Dank für die Hilfe!


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.12.2018, 13:53     Titel:
  Antworten mit Zitat      
Hallo,

ich stand da etwas auf der Leitung. Der deutlich schnellere Weg ist, für jeden Punkt die am nächsten gelegene Gitterkoordinate für x,y und z zu suchen. So, wie es für z eigentlich schon gemacht wurde.

Damit folgt
Code:

for pp = 1:1:p   % über alle Punkte im Raum, die auf Gitter verschoben werden sollen
     for kk = 1:1:k   % über alle Gitterpunkte
          [~,oo] = min(abs(z-Punkt(mm,3,pp)));   % Z-Koordinate wird separat ermittelt
          [~,tt] = min(abs(x-Punkt(mm,1,pp)));  
          [~,rr] = min(abs(y-Punkt(mm,2,pp)));  

          Punkt_verschoben(mm,:,pp) = [x(tt) y(rr)  z(oo)];
      end
end
 
 


läuft deutlich schneller und macht weniger Arbeit.
 
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 - 2024 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.