무지개타고
도형 내외 판별 엑셀로 계산하기 본문
어떤 도형이 있고
또 어떤 점이 있을 때
점이 도형 안에 위치하는지
도형 밖에 위치하는지
그냥 궁금해서
이리저리 궁리를 해보는데
답을 못 찾았다.
도형을 이루는 꼭짓점을 잇는 직선 방정식을 각각 구한 후
점과 비교를 하면 될듯 한데
도형이 복잡하면 다시 말해 직선이 많아지면
점이 각각의 직선에 대해
위 아래 왼편 오른편 어디에 위치하는 지를
정보로 나타내고 하는 것은 너무 복잡해 보여서
엄두가 나지 않아 미루고 미루고 하다가
많이 쉬운 길로 가기로 했다.
즉 검색~
점과 직선과의 교차점의 X 좌표 위치를 비교하여
그 개수가 홀짝인지를 이용하면 된다는 것을 알게 됐다.
이에 대한 자세한 설명은 아래를 참고하면 된다.
이를 갖고 엑셀로 계산해 보자.
먼저 인접한 꼭짓점을 잇는 직선 방정식을 각각 구해야 한다.
직선 방정식은 중학교 때 배울 만큼 쉽고 중요하다.
여기서 필요한 것은 기울기와 절편.
용도는 다르지만 엑셀에서는 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),"도형 內","도형 外")