2013-11-25 141 views
0

我有一個疑問:要確定用戶給出的三個正浮點值(a,b,c)是否可以表示三個具有非零區域的三角形的邊長;通過使用三角不等式定理。用戶輸入不需要檢查錯誤。Python3:檢查三邊是否能夠使用三角形不等式形成非零區域的三角形

下面的代碼是回答表中給出的答案。但是,我不明白,有人可以向我解釋代碼中's'和'eps'的用途嗎?謝謝!

a = float (input ("Please enter a positive value, a: ")) 
b = float (input ("Please enter a positive value, b: ")) 
c = float (input ("Please enter a positive value, c: ")) 

s = (a + b - c) * (a + c - b) * (c + b - a) 

eps = 0.0000001 

if abs(s) > eps: 
    print ("The 3 values form a triangle with non-zero area.") 
else: 
    print ("The 3 values DO NOT form a triangle at all.") 
+0

這真的是解決方案的樣子嗎?如果是這樣,那就錯了:'abs(s)> eps'應該用's> eps'替換。 –

+1

答案是錯的。即使在[Mark Dickinson](http://stackoverflow.com/users/270986/mark-dickinson)建議的「校正」測試中,它給出了地球上一個頂點的三角形,月球上的一個頂點,和一個在仙女座星系(因爲's'將爲零)。 –

+0

@EricPostpischil:同意;我真的不想進入那個...... :-)。 –

回答

1

在一個三角形中,任何兩邊必須加起來大於第三邊。

如果其中一方比另外兩方加起來長,則s等於負數。只要s的值大於eps(基本上只要s大於0就表示3個點確實構成了一個有效的三角形)。

這有幫助嗎?讓我知道你是否需要更多信息。

+0

哦,好的,在你解釋之後,我明白'if abs(s)> eps'部分。我很抱歉,爲什麼使用這個方程s?我不明白這個等式。 ): – unintendedjoy

+0

好吧,我會試着在這裏解釋一下: a b和c代表邊長。 s的第一部分是(a + b - c)。它是說a邊的長度+ b邊的長度 - c邊的長度。在一個有效的三角形中,這必須大於0(由三角不等式定理)。如果不是,則會得到0或負值。 這就是說,c邊比a和b長。這意味着在第二部分(a + c-b)我們會得到一個肯定的答案。同樣的第三。但請記住,我們必須將所有3個部分放在一起。由於我們在第一部分中得到否定,我們的答案是否定的。 – izaic3

+0

@ izaic3:你可能想解釋爲什麼在's'的公式中有*兩個否定因素和一個積極因素是不可能的。 –

0

在s中不可能有兩個負面因素是顯而易見的,因爲較小邊的和小於最長邊意味着當最長邊包括在總和中時,總和將超過較小的側面