2012-03-25 62 views
0

這是一個家庭作業問題,但我一直在拖延一段時間,並且一直無法獲得100%準確的答案。給定一個多邊形,我必須找到該多邊形內任意隨機頂點的內角。我一直在做的是先取得頂點和後面的頂點,然後計算入射角(比如說我把我的頂點看作B),然後我做邊AB和BC,然後找出每個的大小,然後除兩者的點積乘以每個的量值。查找凸多邊形中向量之間的交集程度

我仍然關閉,尤其是在我有矢量(0,10),(0,0),(10,0)的情況下。顯然,中間向量的內角是90度,但是當我使用幅度和點積來計算它時,出於某種奇怪的原因,我得到了45度。

這裏是我的代碼

double dx21 = one.x - two.x; 
     double dx31 = one.x - three.x; 
     double dy21 = one.y - two.y; 
     double dy31 = one.y - three.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)); 
     System.out.println(theta); 
     System.out.println(Math.toDegrees(theta)); 

有什麼一清二楚的是,我已經錯過了?我沿逆時針方向遍歷頂點,因爲這是組織的方式。

回答

2

您的代碼使用點'one'作爲中心點,然後計算'two'和'three'之間的角度。所以,如果你在頂點(0,0),(0,10),(10,0)中放置,你會得到一個90°的角度。實際的計算很好,可以工作,只是你的頂點順序被搞亂了向上。

+0

在我提交請求後大約15分鐘就意識到了這一點!謝謝! – Schroedinger 2012-03-25 06:56:09