两条线段是否相交及交点坐标

通过起点和终点坐标判断两条线段是否相交,并给出交点坐标。使用lua编写代码实现,该方法可扩展应用于线段与多边形交点的计算。
两条线段是否相交及交点坐标

思路:
已知两条线段的起点和终点坐标
先分别求出两条线段的解析式,然后分情况讨论。
lua代码如下:

function UIUtil:getPosOfTowLine(pointA, pointB, pointM, pointN) -- AB线段,MN线段
    local Xa, Ya = pointA.x,pointA.y -- AB线段 首坐标
    local Xb, Yb = pointB.x, pointB.y -- AB线段 尾坐标
    local Xm, Ym = pointM.x, pointM.y -- MN线段 首坐标
    local Xn, Yn = pointN.x, pointN.y -- MN线段 尾坐标

    -- 两条线段的斜率,需要考虑斜率不存在的情况 
    local Kab = (Xb - Xa ~= 0) and (Yb - Ya) / (Xb - Xa) or nil -- 线段AB斜率,方程式:y = x * Kab + Ya - Xa * Kab 
    local Kmn = (Xn - Xm ~= 0) and (Yn - Ym) / (Xn - Xm) or nil -- 线段MN斜率,方程式:y = x * Kmn + Ym - Xm * Kmn 
    print("Kab, Kmn is ---", tostring(Kab), tostring(Kmn))

    -- 两条线段斜率不同时 才会相交。先求出两直线交点坐标,再判断该点是否在线段ab上
    local Xp, Yp -- 设交点坐标为 P
    if Kab and Kmn then -- 斜率都存在
        if Kab ~= Kmn then -- 还要考虑斜率为0不能做分母的情况
            if Kab == 0 then -- 线段ab:解析式 y = Ya
                Xp = (Ya - Ym + Xm * Kmn) / Kmn
                Yp =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值