본문 바로가기
programming language/MATLAB

MATLAB 다각형 내부의 점들 찾기 inpolygon

by __observer__ 2014. 5. 1.
반응형

아래 포스팅에서 MATLAB에서 다각형 그리는 방법에 대해 설명드린적이 있는데요~

 

 

2014/04/09 - [programming language/MATLAB] - MATLAB 원(Circle), 다각형(Polygon) 그리기




오늘은 이렇게 만들어진 다각형 내부의 점들을 찾는 inpolygon() 함수에 대해 설명 드리려 합니다.

 

예를 다음과 같이 사각형을 하나 그려보죠~

 

xv=[-1 1 1 -1]; xv=[xv xv(1)];

yv=[1 1 -1 -1]; yv=[yv yv(1)];

plot(xv,yv), grid on

axis([-2 2 -2 2])

다음으로 정규분포를 갖는 랜덤 한 x, y 값들을 생성합니다. randn 함수에 대해서는 아래 포스팅 참조바랍니다. 



2011/03/23 - [programming language/MATLAB] - MATLAB random number 생성


x = randn(256,1); y = randn(256,1);

 

(x,y)의 값들중에서 xv, yv 로 구성된 다각형 안에 있는 점들만 추려내기 위해서는 inpolygon함수를 사용합니다.

 

아래와 같이 사용가능합니다.

in = inpolygon(x,y,xv,yv);

 

inpolygon함수의 결과인 in 변수에는 x, y 좌표 중 xv,yv 로 구성된 다각형 내의 값들의 인덱스가 logical 값으로 표현됩니다.

 

MATLAB 에서는 logical 값들은 인덱스로 사용할 수 있으므로 다음과 같이 표현하면~ x, y 좌표 중 xv,yv 로 구성된 다각형 내에 있는 값들만 추릴 수도 있겠죠~

x(in),y(in)

 

반대로 x, y 좌표 중 xv,yv 로 구성된 다각형 내에 없는 값들만 추리기 위해서는 in 값에 ~(NOT) 을 붙여줘서 다음과 같이 할 수 있습니다.



x(~in),y(~in)

 

그럼 이제 위 설명들을 종합해서 x, y 좌표 중 xv,yv 로 구성된 다각형 내의 값과 그렇지 않은 값들로 구분해서 그래프를 그려 볼까요?

코드는 다음과 같습니다.

 

xv=[-1 1 1 -1]; xv=[xv xv(1)];

yv=[1 1 -1 -1]; yv=[yv yv(1)];

 

x = randn(256,1); y = randn(256,1);

 

in = inpolygon(x,y,xv,yv);

 

plot(xv,yv,x(in),y(in),'r+',x(~in),y(~in),'k>'), grid on

axis([-2 2 -2 2])

legend('Polygon','In Polygon', 'Out Polygon' )



반응형

댓글