무지개타고
도형 내외 판별 엑셀로 계산하기 본문
어떤 도형이 있고
또 어떤 점이 있을 때
점이 도형 안에 위치하는지
도형 밖에 위치하는지
그냥 궁금해서
이리저리 궁리를 해보는데
답을 못 찾았다.
도형을 이루는 꼭짓점을 잇는 직선 방정식을 각각 구한 후
점과 비교를 하면 될듯 한데
도형이 복잡하면 다시 말해 직선이 많아지면
점이 각각의 직선에 대해
위 아래 왼편 오른편 어디에 위치하는 지를
정보로 나타내고 하는 것은 너무 복잡해 보여서
엄두가 나지 않아 미루고 미루고 하다가
많이 쉬운 길로 가기로 했다.
즉 검색~
점과 직선과의 교차점의 X 좌표 위치를 비교하여
그 개수가 홀짝인지를 이용하면 된다는 것을 알게 됐다.
이에 대한 자세한 설명은 아래를 참고하면 된다.
점이 다각형 내부에 있는지 판별하는 함수
중요한 공식이니 꼭 외우도록 한다!! [참조 :http://bowbowbow.tistory.com/24] static boolean isInside(int tx, int ty){ int crosses = 0; //점과 오른쪽 반직선과 다각형과의 교점 개수 int j; for (int i =..
sncap.tistory.com
이를 갖고 엑셀로 계산해 보자.
먼저 인접한 꼭짓점을 잇는 직선 방정식을 각각 구해야 한다.
직선 방정식은 중학교 때 배울 만큼 쉽고 중요하다.
여기서 필요한 것은 기울기와 절편.
용도는 다르지만 엑셀에서는 Slope, Intercept 함수를 활용하면
손쉽게 기울기와 절편을 구할 수 있다.
참고로 Slope 및 Intercept 함수는
회귀방정식의 회귀계수를 추정하는 함수이다.
구한 기울기와 절편을 이용해 점과 교차하는 x 좌표 값을 구해서
이게 점의 한쪽 편에 위치하는지
또한 직선 구간 내에 위치하는지를
검토하면 계산은 거의 끝난다.
그리고 계산의 편리를 위해
도형의 첫 꼭짓점(가)을 복제한 계산용 꼭짓점(가')을 추가해
계산에 사용했다.
e3 교차점 유무
=IFERROR( ($C$14<=(($D$14-$J3)/$I3)) *($C3<=(($D$14-$J3)/$I3)) *((($D$14-$J3)/$I3)<=$C4),0)
i3 기울기
=SLOPE($D3:$D4,$C3:$C4)
j3 절편
=INTERCEPT($D3:$D4,$C3:$C4)
이를 종합해 점의 도형 내외 판별하는, 하나에 수식으로 압축하면 아래와 같다.
e14 은 배열수식이므로 입력 시 Ctrl, Shift, Enter 키를 동시에 누른다.
e14
=SUM(IFERROR( ($C14<=(($D14-$J$3:$J$7)/$I$3:$I$7)) *($C$3:$C$7<=(($D14-$J$3:$J$7)/$I$3:$I$7)) *((($D14-$J$3:$J$7)/$I$3:$I$7)<=$C$4:$C$8), 0))
f14
=IF(ISODD(E14),"도형 內","도형 外")