Verfasst am: 10.08.2010, 08:44
Titel: Hilfe! Optimierung, for Schleife wegbringen!!!
Hallo!
Ich brauche bitte die Hilfe eines guten Programmierers.
Ich habe einige Liniensegmente und einen Referenzpunkt und berechne mir den minimalen Abstand zwischen den Liniensegmenten und meinem Punkt.
So weit so gut, das schaffe ich alles.
Hier mal der Code:
Code:
% Generate random lines L and one Reference Point P
L = rand(5,4); %[x1, y1, x2, y2]
P = rand(1,2); %[x, y]
%
% Calculate the squared lengths of all lines
Px = L(:,3) - L(:,1);
Py = L(:,4) - L(:,2);
Ls = Px.^2 + Py.^2;
%
% Calculate the minimal distances between the Reference point and the % lines.
ua = ((P(1)-L(:,1)).*Px + (P(2)-L(:,2)).*Py) ./ Ls;
ua(ua>1) = 1;
ua(ua<0) = 0;
Cx = L(:,1) + ua.*Px;
Cy = L(:,2) + ua.*Py;
C = [Cx, Cy];
Cx und Cy sind nun die Koordinaten der Punkte auf den jeweiligen Linien, die den geringsten Abstand zu meinem Referenzpunkt haben.
So nun zum Problem: Ich habe mehrere Punkte und brauche von jedem einzelnen Punkt den minimalen Abstand zu allen Linien. Ich hab das mal ganz einfach gekoest und das ganze in eine Schleife gepackt und rechne mir jeden Punkt einzeln durch.
Allerdings brauche ich diese Funktion in einer Schleife sehr oft und hab sehr viele Linien und Punkte, also kommt es fuer mich auf jede Millisekunde an.
Kann mir bitte jemand zeigen, wie ich das ohne Schleife schaffe, oder besser gesagt die schnellst moegliche Loesung dafuer?
es ist wichtig zu wissen, wieviele Linien und Punkte Du im richtigen Programm verwendest. Für 1000 Punkte und 500000 Linien würde ich eine andere Lösung erwarten als für 500000 Punkte und 1000 Linien.
% Generate random lines L and one Reference Point P
L = rand(2000,4); %[x1, y1, x2, y2]
P = rand(2000,2); %[x, y] %
% Matrizen um eine Dimension erweitern
P1_2D=repmat(P(:,1),[1length(L(:,1))]);
P2_2D=repmat(P(:,2),[1length(L(:,1))]);
L1_2D=repmat(L(:,1),[1length(L(:,1))]);
L2_2D=repmat(L(:,2),[1length(L(:,1))]);
L3_2D=repmat(L(:,3),[1length(L(:,1))]);
L4_2D=repmat(L(:,4),[1length(L(:,1))]);
%
% Calculate the squared lengths of all lines % Px = L(:,3) - L(:,1);
Px=L3_2D-L1_2D;
% Py = L(:,4) - L(:,2);
Py=L4_2D-L2_2D;
Ls = Px.^2 + Py.^2;
%
% Calculate the minimal distances between the Reference point and the % lines.
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.