matlab에서 객체 배열을 조작하는 데 arrayfun을 사용할 필요가 없습니다.
[rectangles.minx]
모든 사각형의 minx
배열을 산출 : 객체의 배열에서 속성의 배열을 취득하기위한 매우 유용한 속기가있다.
그래서 원점에 가장 가까운 점을 알고 싶으면 원점과의 좋은 '유클리드 거리를 계산할 것입니다. 바로 옆의 벡터를 사용하면 REALLY이 간단합니다. 다음과 같이
유클리드 거리가 정의됩니다
d(a,b) = sqrt((a.x - b.x)^2 + (a.y - b.y)^2);
이 벡터와 함께 계산 :
distances = sqrt([rectangles.minx].^2 + [rectangles.miny].^2)
이 모든 지점의 거리와 벡터를 얻을 것입니다. 최소값을 찾는 것은 간단합니다 :
[~, idx] = min (거리);
min 함수는 1x2 배열을 반환하며 첫 번째 위치는 최소값이고 두 번째 인덱스는 인덱스입니다. 나는 첫 번째 리턴 값에 관심이 없다는 것을 나타내는 matlab 표기법 [~, idx]
을 사용했으며, 두 번째 변수는 변수 idx
에 저장해야한다.
필자는 직사각형 클래스를 테스트 용으로 만 만든 예제를 작성했지만 클래스에도 사용할 수 있습니다. 아래에 정의한 클래스의 코드와 (0,0)에 가장 가까운 점을 계산하는 코드가 있습니다.
실행이 아이디어를 재생하고 필요 :)에
테스트 클래스 정의 (Rectangle.m라는 파일이 저장)를 적응 :
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
코드를
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');