무지개타고

도형 내외 판별 엑셀로 계산하기 본문

Program

도형 내외 판별 엑셀로 계산하기

OnRainbow 2021. 10. 14. 22:31

어떤 도형이 있고

또 어떤 점이 있을 때

점이 도형 안에 위치하는지

도형 밖에 위치하는지 

그냥 궁금해서 

이리저리 궁리를 해보는데

답을 못 찾았다.

 

 

도형을 이루는 꼭짓점을 잇는 직선 방정식을 각각 구한 후

점과 비교를 하면 될듯 한데

도형이 복잡하면 다시 말해 직선이 많아지면

점이 각각의 직선에 대해

위 아래 왼편 오른편 어디에 위치하는 지를

정보로 나타내고 하는 것은 너무 복잡해 보여서

엄두가 나지 않아 미루고 미루고 하다가

많이 쉬운 길로 가기로 했다.

즉 검색~

 

점과 직선과의 교차점의 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),"도형 內","도형 外")

 

Comments