定义二维点point类包含点的坐标x和y再定义二维的三角形triangle类在三角形类中能对三角形类别进行判断。首先判断输入的三个点能否构成三角形然后判断是否为等腰三角形、等边三角形、直角三角形、等腰直角三角形。注意:要考虑计算机中实数计算的精度误差
import math
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
class Triangle:
def __init__(self, point1, point2, point3):
self.point1 = point1
self.point2 = point2
self.point3 = point3
def is_triangle(self):
# 判断三个点是否能构成三角形
x1, y1 = self.point1.x, self.point1.y
x2, y2 = self.point2.x, self.point2.y
x3, y3 = self.point3.x, self.point3.y
area = abs((x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) / 2)
return area > 0
def is_isosceles(self):
# 判断是否为等腰三角形
side1 = math.sqrt((self.point1.x - self.point2.x)**2 + (self.point1.y - self.point2.y)**2)
side2 = math.sqrt((self.point1.x - self.point3.x)**2 + (self.point1.y - self.point3.y)**2)
side3 = math.sqrt((self.point2.x - self.point3.x)**2 + (self.point2.y - self.point3.y)**2)
return side1 == side2 or side1 == side3 or side2 == side3
def is_equilateral(self):
# 判断是否为等边三角形
side1 = math.sqrt((self.point1.x - self.point2.x)**2 + (self.point1.y - self.point2.y)**2)
side2 = math.sqrt((self.point1.x - self.point3.x)**2 + (self.point1.y - self.point3.y)**2)
side3 = math.sqrt((self.point2.x - self.point3.x)**2 + (self.point2.y - self.point3.y)**2)
return side1 == side2 == side3
def is_right(self):
# 判断是否为直角三角形
side1 = math.sqrt((self.point1.x - self.point2.x)**2 + (self.point1.y - self.point2.y)**2)
side2 = math.sqrt((self.point1.x - self.point3.x)**2 + (self.point1.y - self.point3.y)**2)
side3 = math.sqrt((self.point2.x - self.point3.x)**2 + (self.point2.y - self.point3.y)**2)
sides = [side1, side2, side3]
sides.sort()
return abs(sides[0]**2 + sides[1]**2 - sides[2]**2) < 1e-6
def is_isosceles_right(self):
# 判断是否为等腰直角三角形
return self.is_right() and self.is_isosceles()
# 创建三个点
point1 = Point(0, 0)
point2 = Point(0, 3)
point3 = Point(4, 0)
# 创建三角形
triangle = Triangle(point1, point2, point3)
# 判断是否为三角形
if triangle.is_triangle():
print("可以构成三角形")
else:
print("无法构成三角形")
# 判断三角形类别
if triangle.is_isosceles_right():
print("等腰直角三角形")
elif triangle.is_right():
print("直角三角形")
elif triangle.is_equilateral():
print("等边三角形")
elif triangle.is_isosceles():
print("等腰三角形")
else:
print("普通三角形")
注意:由于计算机中实数计算存在精度误差,因此在判断直角三角形时,使用了1e-6的误差范围
原文地址: https://www.cveoy.top/t/topic/hQU6 著作权归作者所有。请勿转载和采集!