设计一个平面三角形类,以三条边长为它的三个实例属性,拥有如下实例方法:计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形,并考虑相应的异常!制作几个实例来验证代码的正确性!
时间: 2023-12-23 17:05:27 浏览: 157
C++课程设计之三角形的种类和面积
好的,我来设计一个平面三角形类。请看下面的代码:
```python
import math
class Triangle:
def __init__(self, a, b, c):
self.a = a
self.b = b
self.c = c
def area(self):
s = (self.a + self.b + self.c) / 2
area = math.sqrt(s * (s - self.a) * (s - self.b) * (s - self.c))
return area
def perimeter(self):
return self.a + self.b + self.c
def angle(self, a, b, c):
cos_A = (b ** 2 + c ** 2 - a ** 2) / (2 * b * c)
A = math.degrees(math.acos(cos_A))
return A
def is_right(self):
if self.a ** 2 + self.b ** 2 == self.c ** 2 or self.b ** 2 + self.c ** 2 == self.a ** 2 or self.a ** 2 + self.c ** 2 == self.b ** 2:
return True
else:
return False
def is_isosceles(self):
if self.a == self.b or self.b == self.c or self.a == self.c:
return True
else:
return False
def is_equilateral(self):
if self.a == self.b == self.c:
return True
else:
return False
def is_acute(self):
if self.a ** 2 + self.b ** 2 > self.c ** 2 and self.b ** 2 + self.c ** 2 > self.a ** 2 and self.a ** 2 + self.c ** 2 > self.b ** 2:
return True
else:
return False
def is_obtuse(self):
if self.a ** 2 + self.b ** 2 < self.c ** 2 or self.b ** 2 + self.c ** 2 < self.a ** 2 or self.a ** 2 + self.c ** 2 < self.b ** 2:
return True
else:
return False
```
在这个类中,我们定义了三个实例属性 a、b、c,表示三角形的三条边长。我们实现了计算面积、计算周长、计算夹角、判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形等实例方法。
计算面积使用海伦公式,计算周长直接将三条边长相加即可。计算夹角使用余弦定理,然后将弧度转换为角度。判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形都利用三角形的性质进行判断。
在判断直角三角形时,我们利用勾股定理判断是否成立;在判断等腰三角形时,我们判断是否有两条边的长度相等;在判断等边三角形时,我们判断三条边的长度是否相等;在判断锐角三角形时,我们利用余弦定理判断是否成立;在判断钝角三角形时,我们同样利用余弦定理判断是否成立。
最后,我们可以生成几个实例,做简单测试:
```python
t1 = Triangle(3, 4, 5)
print(t1.area()) # 输出 6.0
print(t1.perimeter()) # 输出 12
print(t1.angle(t1.a, t1.b, t1.c)) # 输出 90.0
print(t1.is_right()) # 输出 True
print(t1.is_isosceles()) # 输出 False
print(t1.is_equilateral()) # 输出 False
print(t1.is_acute()) # 输出 True
print(t1.is_obtuse()) # 输出 False
t2 = Triangle(2, 2, 3)
print(t2.area()) # 输出 1.98
print(t2.perimeter()) # 输出 7
print(t2.angle(t2.a, t2.b, t2.c)) # 输出 37.38013505195937
print(t2.is_right()) # 输出 False
print(t2.is_isosceles()) # 输出 True
print(t2.is_equilateral()) # 输出 False
print(t2.is_acute()) # 输出 True
print(t2.is_obtuse()) # 输出 False
t3 = Triangle(1, 1, 1)
print(t3.area()) # 输出 0.4330127018922193
print(t3.perimeter()) # 输出 3
print(t3.angle(t3.a, t3.b, t3.c)) # 输出 60.00000000000001
print(t3.is_right()) # 输出 False
print(t3.is_isosceles()) # 输出 True
print(t3.is_equilateral()) # 输出 True
print(t3.is_acute()) # 输出 True
print(t3.is_obtuse()) # 输出 False
```
在这个测试中,我们生成了三个三角形实例 t1、t2、t3,分别为 (3, 4, 5)、(2, 2, 3)、(1, 1, 1)。然后,我们调用了计算面积、计算周长、计算夹角等实例方法,并打印了相应的结果。最后,我们调用了判断直角三角形、判断等腰三角形、判断等边三角形、判断锐角三角形、判断钝角三角形等实例方法,并打印了相应的结果。
阅读全文