我是靠谱客的博主 霸气香烟,最近开发中收集的这篇文章主要介绍计算两条线段的交点,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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

最后

以上就是霸气香烟为你收集整理的计算两条线段的交点的全部内容,希望文章能够帮你解决计算两条线段的交点所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(38)

评论列表共有 0 条评论

立即
投稿
返回
顶部