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的误差范围

定义二维点point类包含点的坐标x和y再定义二维的三角形triangle类在三角形类中能对三角形类别进行判断。首先判断输入的三个点能否构成三角形然后判断是否为等腰三角形、等边三角形、直角三角形、等腰直角三角形。注意:要考虑计算机中实数计算的精度误差

原文地址: https://www.cveoy.top/t/topic/hQU6 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录