본문 바로가기
programming language/MATLAB

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

by 남성 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' )



댓글8

  • artcloud 2014.07.07 12:43 신고

    안녕하세요, 제가 지금 원에 대해서도 저걸 적용해보려고 하는데 원도 저런 방식으로 하면 당연히 될까요?
    원 영역 안에 있는 점들에 대해서만 연산을 적용하고 싶은데, 위 방법이 원에 대해서도 된다면 편할 것 같아서요.
    최종적으로는 부채꼴 면적 안에 들어가는 애들만 하게 하고 싶은데, 일단은 원 영역 전체로 하고 싶습니다.
    답글

  • artcloud 2014.07.07 14:54 신고

    아 해결되었습니다.
    답글

  • 구름 2017.03.28 01:57

    원에대한 적용은 어떤식으로 해야할까요 ㅠ?
    매트랩 왕초보라 전혀 모르겠습니다
    답글

    • 남성 2017.03.28 08:27 신고

      아래 글 참조하여 원의 값을 구한다음

      http://iamaman.tistory.com/1235


      inpolygon() 함수에 넣어주면 되겠네요.

    • 구름 2017.03.28 13:43

      코드를 다운받아서 짤수는없ㅇ는상황이라서 어떻게해야하는지 모르겠습니다ㅠㅠ

    • 2017.03.28 16:01

      비밀댓글입니다

    • 남성 2017.03.28 16:18 신고

      위에 댓글 달았듯이 http://iamaman.tistory.com/1235 글 참조하여 원을 그리고
      찾고자 하는 x,y 값을 meshgrid 를 사용하여 구하고
      마지막에 위 포스팅 참조하여 inpolygon() 함수를 적용하고 그래프 그리면 될 겁니다.