2012-04-01 32 views
1

嘿,這是一個我正在努力的家庭作業難題,我的觸發不太強烈,所以忍受着我。計算多邊形頂點處的外角

我有一個三個頂點的列表,我已經想出瞭如何計算它們相遇處的內角(我使用它來測試以確定它們有一個有效的角度,所以多邊形是一個有效的多邊形)。

目前我挖出三個頂點一排,然後計算邊我想對角頂點,然後在該點得到矢量產品的ACOS:

  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)); 

我名義上知道我可以通過從360度減去內角獲得外角,但這是一個完整性檢查,以確保多邊形是有效的(頂點按逆時針順序)。

我給出的說明是爲了確保矢量產品在頂點處的正確性,但是我一直在紙上玩這個遊戲一段時間,並且沒有任何運氣讓它起作用。

我知道這主要是一個數學問題,但任何建議都會非常有用。

+0

請記住這些都是以逆時針順序組織的二維向量。 – Schroedinger 2012-04-01 23:56:46

回答

2

以下是一些注意事項。

首先,通常定義的外角是180度 - 內角,或者pi - 內角,取決於您的單位。見here。快速的完整性檢查可以將外部角度加在一起以確保你得到一個圓圈。

其次,你可能知道這一點,但我應該指出,Math.acos返回一個以弧度爲單位的角度,而不是度數。第三,請注意,餘弦不能區分凸角和凹角,這意味着您的內角方法僅適用於凸多邊形。您可能會更好地使用交叉產品,這會爲您提供角度的正弦。最後,回到你的問題,這裏有一個提示:你看看p2-> p1和p2-> p3的向量;然後看看p2-> p1,p2-> p3的向量。當我讀到這個問題時,我從p1-> p2和p2-> p3中描繪了每個向量。任何一種方法都是解決問題的完美方法,但請考慮這些矢量對之間的角度是如何不同的,以及它們與您的問題之間的關係。

+0

我最終通過這個混淆,並沒有真正得到它的工作,感謝您的幫助無論如何。 – Schroedinger 2012-04-12 04:02:04