您的位置:首页 > 编程语言 > Python开发

测试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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  python 面试
相关文章推荐