2013-11-25 97 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中不可能有两个负面因素是显而易见的,因为较小边的和小于最长边意味着当最长边包括在总和中时,总和将超过较小的侧面