어떤 (x,y) 좌표계에서 point가 주어진 polygon 속에 있는지 확인하고 싶을 경우가 있다. 이런 경우에 유용하게 사용될 수 있는 함수가 inpolygon 함수이다. 이 함수는 기본적으로 네 개의 인자를 받는다. 앞의 두 개는 확인하고자 하는 (x,y)좌표이고, 뒤의 두 좌표는 polygon의 경계를 나타낸다.
다음과 같은 예제를 통해서 간단히 알아볼 수 있다.
% 내부를 확인할 boundary를 설정한다.
nr_edge = 4;
rand_boundary = 10*rand(nr_edge, 2);
rand_boundary = [rand_boundary ; rand_boundary(1, :)]; % 마지막 모서리를 closed되게 한다.
% 전체 point의 수
nr_point = 100;
rand_pos = 10*rand(nr_point, 2);
% 전체 point에 대해서 검사를 한다.
idx = inpolygon( rand_pos(:, 1), rand_pos(:, 2) ...
, rand_boundary(:, 1)' ...
, rand_boundary(:, 2)' );
inside_idx = idx;
outside_idx = ~idx;
% 그 결과를 plot 한다.
hold on;
h1 = plot( rand_boundary(:, 1), rand_boundary(:, 2), 'b-');
h2 = plot( rand_pos(inside_idx, 1), rand_pos(inside_idx, 2), 'r+' );
h3 = plot( rand_pos(outside_idx, 1), rand_pos(outside_idx, 2), 'go');
legend([h1 h2 h3], 'Boundary', 'Points inside', 'Points outside');
hold off;
'Enginius > Matlab' 카테고리의 다른 글
Get CLICK point in an Image (0) | 2013.07.03 |
---|---|
Make a VIDEO with Matlab (writeVideo) (0) | 2013.07.02 |
Field를 만들고, 특정 Field에서 원하는 값 가져오기 (interp2) (0) | 2013.04.24 |
Matlab과 Linux 사이의 socket 통신 예제 (0) | 2013.04.02 |
multi-colum legend (0) | 2013.02.18 |