余弦定律 returns 三角形的所有角都是 90 度?

Law of cosines returns 90 degrees for all angles in a triangle?

我正在做一个作业,我在其中创建了一个名为 Triangle 的 class,它包含三个边和有关三角形的 returns 信息。具体来说,我正在尝试计算三角形内的三个角度,但由于某种原因我得到的所有角度都是 90 度,这是不可能的。我已经检查了我的代码很多次,但找不到错误,非常感谢您的帮助。谢谢你。

from math import acos, degrees, sqrt
import turtle

class Triangle:

    def __init__(self, side_a=None, side_b=None, side_c=None):

        self.side_a = side_a
        self.side_b = side_b
        self.side_c = side_c

    def is_triangle(self):
        return ((self.side_a + self.side_b) > self.side_c) \
               and ((self.side_a + self.side_c) > self.side_b) \
               and ((self.side_b +self.side_c) > self.side_a)

    def perimeter(self):
        if self.is_triangle():
            return self.side_a + self.side_b + self.side_c
        else:
            return None

    def area(self):
        if self.is_triangle():
            s = self.perimeter()/2
            print s
            return sqrt((s*(s-self.side_a)*(s-self.side_b)*(s-self.side_c)))
        else:
            return None

    def a_angle(self):
        if self.is_triangle():
            return degrees(acos((self.side_b**2 + self.side_c**2 - self.side_a**2)/(2*self.side_b*self.side_c)))
        else:
            return None

    def b_angle(self):
        if self.is_triangle():
            return degrees(acos((self.side_c**2 + self.side_a**2 - self.side_b**2)/(2*self.side_c*self.side_a)))
        else:
            return None

    def c_angle(self):
        if self.is_triangle():
            return degrees(acos((self.side_a**2 + self.side_b**2 - self.side_c**2)/(2*self.side_a*self.side_b)))
        else:
            return None

    def angle(self):
        return self.a_angle(), self.b_angle(), self.c_angle()

    def __str__(self):
        pass






tri = Triangle(11, 7, 9)
print tri.is_triangle()
print tri.perimeter()
print tri.area()
print tri.a_angle()
print tri.b_angle()
print tri.c_angle()
print tri.angle()

在 Python 2 中,默认情况下整数除法会将结果截断为整数,因此 5/2 之类的值将等于 2。在您的情况下,除以边的结果为零。

修复它的最简单方法是在文件的最开头执行 from __future__ import division。这使得除法总是 return 一个浮点数。