chungma900   6년 전

ccw공부하고 풀어보았는데 80%쯤 가다가 틀립니다.. 교차점 부분이 잘못된 건지 플로우가 잘못된건지 모르겠네요.

잘못된 부분 지적 부탁드립니다.

chogahui05   6년 전

테스트를 해 보니..

선분의 벡터가 (0,1)이나 (1,0)이 아닌 경우 처리를 못하고 있네요..

요 경우에 어떻게 나올지는 잘 모르겠는데.. 선분 L5가 (40,50)에서 출발해서 (20,70)까지 가는 겁니다.

즉 y = 90-x인 거죠.


(39,51) 역시 y=90-x이면서 39가 20보다 크고, 40보다 작기 때문에 선분 자체에 Hall이 포함됩니다.

쥐가 (50,40)에 있다고 해 봅시다.

그러면 이 친구 역시 y=90-x 위에 있죠? 물론 L5위에 없지만.. 그런데 쥐 입장에서 Hall을 볼 수 있을까요?

chogahui05   6년 전

교차점 같은 경우 선분의 벡터가 (0,1)이나 (1,0) 혹은 (0,-1), (-1,0)

그러니까 x방향과 y방향 중 한 방향이 0이여서 그래 해도 되었겠지만. 문제에서

모든 직선은 x축이나 y축 방향과 같다는 말이 있었나요..? 아무리 찾아봐도 그 말은 없는 거 같습니다.


그렇기 때문에 쥐(A)와 Hall(B)을 연결한 선분 L1(선분 AB)과 선분 L(선분 CD)의 교점 갯수를 구하실 때 조심하셔야 해요.

즉, A, B, C, D가 한 직선 위에 있을 때. 선분 AB와 선분 CD가 만나는지 안 만나는지.

만나면 한 점에서 만나는지, 무한히 많은 점에서 만나는지 판단을 해 주셔야 하는데..


그건 부등식의 영역으로 해결을 할 문제이지요.

chogahui05   6년 전

코드 다시 보니 오버플로우도 일어나네요.

ccw 함수 부분을 ccw의 값을 리턴시킬 게 아니라 부호만 판단해서 음수면 -1, 0이면 0, 양수면 1을 리턴하게 하세요.

chungma900   6년 전

아 드디어 맞았네요 ㅋㅋㅋㅋ  네점이 한직선 위에 있을때 이문제에서는 벡터 비교를 저렇게 하면 안됬네요... operator overloading으로

해결했습니다. 답변 감사합니다!!!!

chogahui05   6년 전

오오.. 축하드려요..

가끔 ccw 이거 리턴할 때 오버플로우가 일어나서 틀린 경우도 있긴 있었어요.. 저도 다 구해놓고 맞왜틀? 이랬던 기억이 납니다.

그냥 부호만 리턴하면 되는 경우에는 -1, 0, 1을 리턴하게끔 하는 것도 좋은 방법인 거 같아요.

댓글을 작성하려면 로그인해야 합니다.