2012-04-01 5 views
1

안녕 얘들 아, 이건 내가하고있는 숙제 퍼즐이야. 내 삼각대는 너무 강해서 나와 곰이 안된다.다각형의 꼭지점에서 외각 계산하기

나는 3 개의 꼭지점 목록을 가지고 있는데, 나는 그들이 만나는 곳에서 내부 각을 계산하는 방법을 이미 알아 냈다. (나는 유효한 각을 가지고 있는지 확인하기 위해 이것을 사용하여 유효한 다각형이다.).

  double dx21 = one.x - two.x; 
      double dx31 = three.x - two.x; 
      double dy21 = one.y - two.y; 
      double dy31 = three.y - two.y; 
      double m12 = Math.sqrt(dx21*dx21 + dy21*dy21); 
      double m13 = Math.sqrt(dx31*dx31 + dy31*dy31); 
      double theta = Math.acos((dx21*dx31 + dy21*dy31)/ (m12 * m13)); 

나는 명목상 알고

현재는 그때 그때, 나는의 각도를 원하는 정점에 가장자리를 계산하는 시점에서 벡터 제품의 ACOS를 얻을 수 행에 세 개의 정점을 뽑아 360도에서 내각을 뺀 외각을 얻을 수는 있지만 폴리곤이 유효한지 확인하는 위법입니다 (정점은 시계 반대 방향입니다).

내가받은 메모는 정점에서 벡터 제품의 죄가 확실한 지 확인하는 것이었지만 종이에서 잠시 동안이 작업을 해본 결과 실제로 작동하지 않는 행운이 없었습니다.

저는 대부분 수학 문제이지만 어떤 조언도 유용 할 것입니다.

+0

이들은 모두 시계 반대 방향으로 구성되어야하는 2 차원 벡터입니다. – Schroedinger

답변

2

다음은 몇 가지 메모입니다.

먼저 외각은 180도 - 내각 또는 내각 - 단위에 따라 다릅니다. here을 참조하십시오. 신속한 온 전성 검사는 외각을 추가하여 원을 확보하는 것입니다.

둘째로, 당신은 이것을 알고 있을지 모르지만 Math.acos가 각도가 아니라 라디안 단위의 각도를 반환한다는 것을 지적해야합니다.

세 번째, 코사인은 볼록 각도와 오목 각도를 구별 할 수 없으므로 내부 각도 방법은 볼록한 다각형에만 유효합니다. 교차 제품으로 작업하는 것이 더 나을 것입니다. 교차 제품은 각도의 사인을 줄 것입니다.

마지막으로 질문에 대답하면 다음과 같은 힌트가 있습니다. p2-> p1 및 p2-> p3의 벡터를 보게됩니다. 문제를 읽을 때, 나는 p1-> p2와 p2-> p3의 각 벡터를 묘사했다. 어느 것이 든 문제를 풀 수있는 완벽하게 유효한 방법이지만 이러한 벡터 쌍 사이의 각도가 어떻게 다른지, 그리고 그것이 어떻게 문제와 관련되는지 생각하십시오.

+0

결국 나는이 일을 혼란스럽게 만들었지 만 어쨌든 도움을 주셔서 감사합니다. – Schroedinger