PHP判别点能否正在多边形区域表里;
依据数学常识的射线法,射线与多少多边形订交的点的个数为奇数则是正在多少外部;
偶数正在内部;
/**
* Created by PhpStorm.
* function: inArea
* Description: 判别点能否正在多边形区域内
* User: Xiaoxie
* @param $x
* @param $y
* @param $arr 多少定单坐标
* @return int
*
*/
public function inArea($x,$y,$arr)
{
//点的数目
$count = count($arr);
$n = 0; //点与线订交的个数
$bool = 0;//外
for ($i = 0, $j = $count - 1; $i < $count; $j = $i, $i++) {
//两个点一条线 掏出两个衔接点的定点
$px1 = $arr[$i][0];
$py1 = $arr[$i][1];
$px2 = $arr[$j][0];
$py2 = $arr[$j][1];
//$x的程度地位画射线
if($x>=$px1 || $x>= $px2)
{
//判别$y 能否正在线的区域
if(($y>=$py1 && $y<=$py2) || ($y>=$py2 && $y<= $py1)){
if (($y == $py1 && $x == $px1) || ($y == $py2 && $x == $px2)) {
#假如$x的值以及点的坐标相反
$bool = 2;//正在点上
return $bool;
}else{
$px = $px1+($y-$py1)/($py2-$py1)*($px2-$px1) ;
if($px ==$x)
{
$bool = 3;//正在线上
}elseif($px< $x){
$n++;
}
}
}
}
}
if ($n%2 != 0) {
$bool = 1;
}
return $bool;
}测试数组
$arr = [
['9.4','12.04'],
['6.68','8.61'],
['9.05','6.06'],
['6.24','3.87'],
['10.02','2.55'],
['14.06','4.13'],
['16.35','7.56'],
['11.69','8.35'],
];
$x =15.73;
$y = 5.62;
//正在外
$x = 9.97;
$y = 4.96; //正在内 
更多PHP相干常识,请拜访PHP教程!
以上就是PHP判别点能否正在多边形区域表里的具体内容,更多请存眷资源魔其它相干文章!
标签: php php开发教程 php开发资料 php开发自学
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!