lua 实现点与多边形的碰撞

--判断点是否在多边形范围内
function isPointInPoly(p,poly)
    --定义一个点(px,py),flag标志点是否在poly中
    local px=p.x
    local py=p.y
    local flag = false
    print(px,py)

    --判断点是否在多边形的某条线的顶点上
    for i=1,#poly do
        local sx=poly[i].x  --多边形某条线的起始点x值
        local sy=poly[i].y  --多边形某条线的起始点y值
        local tx=poly[#poly].x  --多边形某条线的终点x值
        local ty=poly[#poly].y  --多边形某条线的终点y值
        print(sx,sy,tx,ty)
        --点与多边形顶点重合
        if (px == sx and py == sy) or (px==tx and py == ty) then
            flag = true
            break
        --判断点是否在多边形的边上或内部
        elseif (py>sy and py<=ty) or (py<=sy and py>ty) then
            local x = sx +(py-sy)*(tx-sx)/(ty-sy)
            --点在多边形内
            if px == x then
                flag = true
                break
            --点不在多边形内
            elseif px < x then
                flag = false
                break
            end
        end
    end
    return flag
end

你可能感兴趣的:(lua 实现点与多边形的碰撞)