概述
def isLineCross(pt1_1 , pt1_2 , pt2_1 , pt2_2):
'''
判断两条线是否相交
:param pt1_1:
:param pt1_2:
:param pt2_1:
:param pt2_2:
:return:True相交
'''
ret = min(pt1_1[0] , pt1_2[0]) <= max(pt2_1[0] , pt2_2[0]) and min(pt2_1[0] , pt2_2[0]) <= max(pt1_1[0] , pt1_2[0]) and min(pt1_1[1] , pt1_2[1]) <= max(pt2_1[1] , pt2_2[1]) and min(pt2_1[1] , pt2_2[1]) <= max(pt1_1[1] , pt1_2[1])
return ret
def isCross(p1 , p2 , p3):
'''
跨立实验
:param p1:
:param p2:
:param p3:
:return:
'''
x1 = p2[0] - p1[0]
y1 = p2[1] - p1[1]
x2 = p3[0] - p1[0]
y2 = p3[1] - p1[1]
return x1 * y2 - x2 * y1
def IsIntersec(p1,p2,p3,p4):
'''
判断两条线段是否相交
:param p1:
:param p2:
:param p3:
:param p4:
:return:
'''
flag = False
if isLineCross(p1 , p2 , p3 , p4):
if(isCross(p1,p2,p3) * isCross(p1,p2,p4)<=0 and isCross(p3,p4,p1) * isCross(p3,p4,p2) <= 0):
flag = True
else:
flag = False
else:
flag = False
return flag
def getCrossPoint(p1 , p2 , q1 , q2):
'''
计算两条直线的交点
:param pt1:
:param pt2:
:param pt3:
:param pt4:
:return:
'''
jiaodian = []
if IsIntersec(p1 , p2 , q1 , q2):
# 求交点
left = (q2[0] - q1[0]) * (p1[1] - p2[1]) - (p2[0] - p1[0]) * (q1[1] - q2[1])
right = (p1[1] - q1[1]) * (p2[0] - p1[0]) * (q2[0] - q1[0]) + q1[0] * (q2[1] - q1[1]) * (p2[0] - p1[0]) - p1[0] * (p2[1] - p1[1]) * (q2[0] - q1[0])
if left == 0:
return jiaodian
x = int(float(right)/float(left))
left = (p1[0] - p2[0]) * (q2[1] - q1[1]) - (p2[1] - p1[1]) * (q1[0] - q2[0])
right = p2[1] * (p1[0] - p2[0]) * (q2[1] - q1[1]) + (q2[0] - p2[0]) * (q2[1] - q1[1]) * (p1[1] - p2[1]) - q2[1] * (q1[0] - q2[0]) * (p2[1] - p1[1])
if left == 0:
return jiaodian
y = int(float(right)/float(left))
jiaodian.append(x)
jiaodian.append(y)
return jiaodian
最后
以上就是霸气香烟为你收集整理的计算两条线段的交点的全部内容,希望文章能够帮你解决计算两条线段的交点所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复