Sie brauchen nicht auf Arrays von Objekten in Matlab zu bedienen verwenden arrayfun. Es gibt eine sehr nützliche Abkürzung für immer eine Reihe von Eigenschaften aus einem Array von Objekten:
[rectangles.minx]
, dass alle Rechtecke minx
in einem Array liefert.
So zu wissen, welche der Punkt zum Ursprung am nächsten ist, würde ich die guten alten euklidischen Abstand zum Ursprung berechnen. Mit den Vektoren zur Hand, das ist WIRKLICH einfach.
der euklidische Abstand wird wie folgt definiert:
d(a,b) = sqrt((a.x - b.x)^2 + (a.y - b.y)^2);
es mit Vektoren zu berechnen:
distances = sqrt([rectangles.minx].^2 + [rectangles.miny].^2)
Dies wird ein Vektor mit den Entfernungen aller Punkte ergeben. das Minimum zu finden, ist trivial:
[~, idx] = min (Abstände);
Die min-Funktion gibt einen 1x2-Array, wobei die erste Position der Minimalwert ist, der zweite der Index ist. Ich habe die Matlab-Notation [~, idx]
verwendet, um anzugeben, dass ich nicht an dem ersten Rückgabewert interessiert bin, und die zweite sollte in der Variablen idx
gespeichert werden.
Ich habe ein Beispiel, in dem geschrieben ich nur meine Rechteck-Klasse erstellt habe, um es zu testen, aber es wird auch mit Ihrer Klasse arbeiten. Unten sind die Codes für die Klasse, die ich definiert habe, und der Code, der den Punkt berechnet, der (0,0) am nächsten ist.
Run es mit der Idee zu spielen und es an Ihre Bedürfnisse anpassen :)
Testklasse Definition (das Rectangle.m in einer Datei speichern genannt):
classdef Rectangle
properties
minx;
miny;
end
methods
function obj = Rectangle(v1,v2)
if nargin > 1
obj.minx = v1;
obj.miny = v2;
end
end
end
end
-Code
clear all;
numRect = 100;
rect_array = Rectangle(numRect);
% initialize rectangles
for n=1:numRect
r = Rectangle;
r.minx = 100*rand(1,1);
r.miny = 100*rand(1,1);
rect_array(n) = r;
end
% find point closest to the origin
[~, idx] = min(sqrt([rect_array.minx].^2 + [rect_array.miny].^2));
close all;
figure;
% plot the points in blue
plot([rect_array.minx],[rect_array.miny],'b.');
hold on;
% mark a red cross on the point closest to the origin
plot(rect_array(idx).minx, rect_array(idx).miny, 'rx');