2013-11-27 142 views
1

我需要一些算法的幫助,我有一個程序的問題。 我需要製作一個程序,其中用戶輸入座標3點,係數 爲線性函數,這些函數與這三個點所形成的三角形交叉,我需要比較哪些函數與三角形交叉的函數的面積。解決方案的C++替代算法

我會在這裏粘貼代碼,但有東西在我的母語,我只是想知道你對這個解決方案算法的,監守我wokrs只有在點在精確序列中輸入的,我不能讓那個

的手柄

http://pastebin.com/vNzGuqX4 - 代碼

並且例如我用這個http://goo.gl/j18Ch0 代碼不是finnished如果我在不同序列輸入它不工作進入點時「1 1 2 5 4 4 0.5 1等,我只注意到5「的作品,但」4 4 1 1 2 5 0.5 1 5「不是

+2

沒問題,在這裏粘貼代碼並翻譯變量名稱。 – jrok

+3

語言沒問題。我們都很好地閱讀C++並且流利地說出:)請告訴我們到目前爲止您嘗試了些什麼。 – opalenzuela

+0

什麼是「線性函數係數」? –

回答

1

線性必須至少與三角形的兩條邊交叉。所以你可以先找到這兩個交點,這兩個點與三個頂點中的一個會形成一個小三角形。使用此公式計算三角形面積S = sqrt(l *(la)*(lb)*(lc))其中l =(a + b + c)/ 2和a,b,c分別是邊緣。在給定頂點座標的情況下,應該很容易得到邊的長度。一個是小三角形的面積,另一個是大三角形的面積減去小三角形的面積。

+0

它也可以穿過一個頂點,然後一個面積爲0,另一個面積等於三角形的面積。 – jrok

+0

@jrok是的,這將是小triagnle的面積等於0的特殊情況。 –

+0

不錯!你只是幫助我解決了其中一個問題,我沒有想到從大減去小三角。我確實計算了一下,然後把四角形劃分爲兩個三角形得到了他們的面積並將它們合併在一起,但這不是我的解決方案中唯一的問題 如果我可以,我會upvote,但我的名聲不允許: – eLbor

0

如果你的三角形是ABC,一個好的辦法是以下內容:通過點A和B,B和C,C和A

    • 查找線路查找的交集你的線與這三條線。
    • 檢查兩個交點位於三角形邊上。
    • 根據交點計算新的小三角形的表面。