숙제/과제를 해결하고 싶지 않으므로 지금은 코드를 게시하지 않겠습니다. 그러나, 나는 약간의 힌트를 게시 할 것이다. 아래 그림에서
봐 :
우리는 어떻게 C
가 OB
및 D
이 밖에 가장자리 OA
사이에 있음을 알 수 있습니까? 간단합니다 : 우리는 어떤 각도를 비교합니다 : OC
과 OA
사이의 각도가 OB
과 OA
사이의 각도보다 작 으면 C는 OA
보다 분명히 OB
에 더 가깝습니다.
이제 벡터를 알고있는 각도를 어떻게 구할 수 있습니까? 우리는 단조로운 코사인을 사용할 수 있습니다. 증가하는 인수로 감소합니다. 따라서, OC
과 OA
사이의 각의 코사인은 OB
과 OA
사이의 각의 코사인보다 크며, 다시 OD
과 OA
사이의 코사인보다 커집니다.
다음 단계는 코사인을 계산하는 방법을 파악하는 것입니다. 벡터 내적은 도움이됩니다. 값은 피연산자 길이의 곱보다 큰 각도 시간의 코사인입니다. 즉 :
cos(OC; OA) = dotproduct(OC; OA)/(length(OA) * length(OC))
2D의 dotproduct은 간단하다 : 당신이 위의 모든 결합
이
dotproduct(OC; OA) = (C.x - O.x) * (A.x - O.x) + (C.x - O.x) * (A.x - O.x)
요점은 C
또는 D
을 같은 상황에 있는지 여부를 확인하는 간단한 테스트를해야한다 : 이전 가장자리보다 한 가장자리에 더 가깝거나 없습니다.
이제 다각형의 모든 가장자리에 대해이 작업을 반복해야합니다. 테스트가 술어 인 경우 fold
으로이 작업을 수행 할 수 있습니다.
참고 : 다각형이 볼록 인 경우에만 작동합니다. 오목한 다각형의 경우 더 많은 테스트를 추가해야합니다.
둘째 주는 : D
또는 C
또는 둘 모두가 OA
라인 아래에있는 경우 그림에서 어떤 일이 일어날 것인가?이것을 생각하고 위의 fold
메소드에 대한 몇 가지 변경 사항을 의미하는지 확인하십시오.
마지막주의 사항 : 몇 주 후에 과제가 끝났다고 가정하고 몇 주 후에 전체 코드를 게시하겠습니다. 또한, 그 시점에서 나는 위의 질문에 답할 것입니다.
볼록 또는 오목 폴리곤입니까? 아니면 단순한 사각형입니까? –
그들은 모두 오목한 다각형입니다. 언급 할 필요조차 없다고 생각해서 죄송합니다. – AdamMc331