PHP判断一个点是否在 一个图形内[射线法]

2019-07-30T16:04:01
function is_inline($point=array(), $poly=array()){
    $point_x = $point['x'];
    $point_y = $point['y'];

    $in_line = false;
    for ($i=0, $L=count($poly),$j=$L - 1; $i < $L; $j = $i, $i++){

        //获取相邻2个点
        $sx = $poly[$i]['x'];
        $sy = $poly[$i]['y'];
        $tx = $poly[$j]['x'];
        $ty = $poly[$j]['y'];

        // 点与多边形顶点重合
        if(($sx === $point_x && $sy === $point_y) || ($tx === $point_x && $ty === $point_y)) {
            return true;
        }

        // 判断线段两端点是否在射线两侧
        if(($sy < $point_y && $ty >= $point_y) || ($sy >= $point_y && $ty < $point_y)) {
            // 线段上与射线 Y 坐标相同的点的 X 坐标
            $x = $sx + ($point_y - $sy) * ($tx - $sx) / ($ty - $sy);

            // 点在多边形的边上
            if($x === $point_x) {
                return true;
            }

            // 射线穿过多边形的边界
            if($x > $point_x) {$in_line = !$in_line; }
        }
    }
    return $in_line;
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »