Entfernung berechnen, da eine Reihe von Koordinaten
meine Frage ist ziemlich trivial, aber ich bin auf der Suche nach der vektorisierter form.
Mein code ist:
HubHt = 110; % Hub Height
GridWidth = 150; % Grid length along Y axis
GridHeight = 150; % Grid length along Z axis
RotorDiameter = min(GridWidth,GridHeight); % Turbine Diameter
Ny = 31;
Nz = 45;
%% GRID DEFINITION
dy = GridWidth/(Ny-1);
dz = GridHeight/(Nz-1);
if isequal(mod(Ny,2),0)
iky = [(-Ny/2:-1) (1:Ny/2)];
else
iky = -floor(Ny/2):ceil(Ny/2-1);
end
if isequal(mod(Nz,2),0)
ikz = [(-Nz/2:-1) (1:Nz/2)];
else
ikz = -floor(Nz/2):ceil(Nz/2-1);
end
[Y Z] = ndgrid(iky*dy,ikz*dz + HubHt);
BEARBEITEN
Zurzeit bin ich mit dieser Lösung, die angemessene Leistungen:
coord(:,1) = reshape(Y,[numel(Y),1]);
coord(:,2) = reshape(Z,[numel(Z),1]);
dist_y = bsxfun(@minus,coord(:,1),coord(:,1)');
dist_z = bsxfun(@minus,coord(:,2),coord(:,2)');
dist = sqrt(dist_y.^2 + dist_z.^2);
- Ich habe gerade bearbeitete meine Frage wieder. Mal ehrlich, es war offensichtlich ein Fehler in der vorherigen Ausgabe der Frage nach, wie ich die definieren wollen Abstand.
- richtig ist, pdist2 korrekt ist. link aus der docs, die es behauptet zu finden, die den paarweisen Abstand zwischen den einzelnen Elementen von 2-Matrizen
pdist2
ist absolut nicht die Antwort: ich will nicht zur Berechnung der Entfernung zwischen zwei Matrizen, aber die Distanz zwischen den Punkten auf dem Gitter, woY
undZ
sind Vertreter der kartesischen Koordinaten von jedem Punkt auf dem Gitter.- pdist2 ist absolut die Antwort - ich sage nicht, pdist2(Y, Z) ist anzwer aber pdist2 ist die Funktion. Siehe meine Antwort für was Argumente zu übergeben. Es nicht die Distanz zwischen 2-Matrizen, die es findet, der Abstand zwischen jeden zwei-Punkt-Kombinationen aus zwei Listen von Vektoren, die in Ihrem Fall werden die gleichen 2 sind, die sind nur Y und Z abgeflacht und concatened.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich Stimme mit Tal Darom,
pdist2
ist genau die Funktion, die Sie brauchen. Er findet den Abstand für jedes paar von Koordinaten angegeben, die in zwei Vektoren und NICHT die Entfernung zwischen zwei Matrizen.So, ich bin mir ziemlich sicher, dass in Ihrem Fall, Sie möchten diese:
Matrix
[Y(:), Z(:)]
ist eine Liste von allen möglichen koordinieren Kombination über den 2D-Raum definiert durch Y-Z. Wenn Sie möchten, eine matrix mit der Entfernung von jedem Punkt zu jedem anderen Punkt, dann müssen Sie rufen Siepdist2
auf dieser matrix mit sich selbst. Das Ergebnis ist eine 2D-matrix mit den Dimensionennumel(Y)
xnumel(Y)
und obwohl Sie nicht definiert, ich bin mir ziemlich sicher, dass beideY
undZ
sindn*m
Matrizen Bedeutungnumel(Y) == n*m
EDIT:
Eine korrekte Lösung von @Shai ist nur zu verwenden, pdist, da vergleichen wir Punkte innerhalb der gleichen matrix:
Ich bin nicht einverstanden mit Dan und Tal.
Glaube ich, sollten Sie verwenden
pdist
eher alspdist2
.Können Sie die matlab-Funktion
pdist2
(ich denke, es ist in der statistics toolbox) oder Sie können die online-Suche für open-source-gute Implementierungen dieser Funktion.Auch,
Blick auf diese unswer: pdist2 entspricht im MATLAB-version 7
pdinst2
. Ich werde sowieso einen besseren Lesen, um es.