list = [] import random for i in range(1000): # 随机生成1000个点保存到list列表 x = random.randint(1, 1000) y = random.randint(1, 1000) list1 = [] list1.append(x) list1.append(y) list.append(list1) # print('list:%s' % list) point1 = '' point2 = '' point3 = '' for j in range(3): # 随机抽取三个点保存到point1,2,3中 index = random.randint(0, 999) if j == 0: point1 = list[index] elif j == 1: point2 = list[index] elif j == 2: point3 = list[index] print(point1, point2, point3) def func(a, b): def line(x): return a * x + b return line from fractions import Fraction # 引入分数模块 # 根据一般式求出直线方程 a1 = point2[1] - point1[1] # y2-y1 b1 = point1[0] - point2[0] # x1-x2 c1 = point2[0] * point1[1] - point1[0] * point2[1] # x2*y1-x1*y2 A1 = Fraction(-a1 , b1) B1 = Fraction(-c1 , b1) line1 = func(A1, B1) a2 = point3[1] - point2[1] # y2-y1 b2 = point2[0] - point3[0] # x1-x2 c2 = point3[0] * point2[1] - point2[0] * point3[1] # x2*y1-x1*y2 A2 = Fraction(-a2 , b2) B2 = Fraction(-c2 , b2) line2 = func(A2, B2) a3 = point3[1] - point1[1] # y2-y1 b3 = point1[0] - point3[0] # x1-x2 c3 = point3[0] * point1[1] - point1[0] * point3[1] # x2*y1-x1*y2 A3 = Fraction(-a3 , b3) B3 = Fraction(-c3 , b3) line3 = func(A3, B3) m = [(A1, str(B1)), (A2, str(B2)), (A3, str(B3))]# 按照斜率从小到大排序 print(sorted(m)) n = sorted(m) a1 = n[2][0] # 最大直线斜率 b1 = Fraction(n[2][1]) a2 = n[1][0] # 第二大直线斜率 b2 = Fraction(n[1][1]) a3 = n[0][0] # 最小直线斜率 b3 = Fraction(n[0][1]) Line1 = func(a1, b1) # 斜率最大的直线 Line2 = func(a2, b2) # 斜率第二大的直线 Line3 = func(a3, b3) # 斜率最小的直线 waimian = [] xianshang = [] limian = [] for l in list: if l[1]>Line1(l[0]): # 点在斜率最大直线外面一定在三角形外 waimian.append(l) continue elif l[1]<Line2(l[0]): waimian.append(l) continue elif l[1]>Line3(l[0]): waimian.append(l) continue elif l[1]==Line1(l[0]) or l[1]==Line2(l[0]) or l[1]==Line3(l[0]): xianshang.append(l) continue else: limian.append(l) print('三角形外面:%s '%waimian) print('在线上:%s'% xianshang) print('三角形里面:%s'%limian)