简体   繁体   English

余弦定律对于三角形中的所有角度都返回90度?

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

I'm working on an assignment where I make a class called Triangle that takes in three sides and returns information about the triangle. 我正在做一个作业,我制作了一个名为Triangle的类,该类吸收三个面并返回有关三角形的信息。 Specifically, I am trying to calculate the three angles within the triangle, but for some reason I am getting 90 degrees for all angles, which is impossible. 具体来说,我试图计算三角形内的三个角度,但是由于某种原因,我对所有角度都获得了90度,这是不可能的。 I have gone over my code tons of times but can't find the mistake and would greatly appreciate some help. 我已经遍历了很多次代码,但是找不到错误,非常感谢您的帮助。 Thank you. 谢谢。

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()

In Python 2, division of integers by default truncates the result to an integer, so something like 5/2 will equal 2. In your case, dividing the sides results in zero. 在Python 2中,默认情况下,整数除法会将结果截断为整数,因此类似5/2等于2。在您的情况下,将边除以零。

The simplest way to fix it is to do from __future__ import division at the very beginning of your file. 最简单的解决方法是from __future__ import division文件的开头处的from __future__ import division开始。 This makes division always return a float. 这使得除法运算总是返回浮点数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM