[英]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.