测试1000点随机3个点创建三角形, 判断其余997个点在三角形内还是外
2018-03-24 12:51
387 查看
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)
相关文章推荐
- java-第十三章-类的无参方法(一)-根据三角形的三条边长,判断是直角,锐角还是钝角三角形
- 创建一个几何类型类,其中有计算面积getArea()和周长getPerimeter()抽象方法,然后通过它派生出三角形类、圆形类、矩形类,并通过测试类进行测试
- LINUX平台中判断Machine是64位的还是32位的(通过Linux命令,而非自己写测试程序)
- python 2.7 创建问题加答案(选择题-2)生成随机的测试试卷文件
- chrome下判断点击input上标签还是其余标签的实现方法
- 软件测试 -- 在配置测试中,如何判断发现的缺陷是普通问题还是特定的配置问题?
- 帮忙将这个判断三角形的形状程序设计一个测试程序
- 测试(定义类 子类 继承 创建方法 判断)
- 输入任意3个整数 判断是否能组成三角形 它的面积是多少?
- 随机生成3个数,创建3个指针指向这3个数,不改变这3个数,从大到小显示。
- 长度为1的线段,随机在其上选择两点,将线段分为三段,问这3个字段能组成一 个三角形的概率是多少
- 判断三角形三个点是逆时针还是顺时针
- 射线与三角形求交,并判断是否在三角形内的完整代码(带测试)
- Unity3d 判断三角形是顺时针还是逆时针
- Java给出3个点,做三角形判断
- 2.创建一个20个大小的随机数组,然后输入一个数,判断是否存在这个数
- 【算法】计算机图形学的一些经典小题:判断点在多边形内,随机生成三角形内的点,判断两个矩形是否相交等
- 判断三角形三个点是逆时针还是顺时针
- android判断和创建快捷方式(4.03测试通过)