判断点是否在多边形内
射线发判断点是否在多边形内,即平面坐标内以目标点水平做一条射线,看这条射线与多边形边交点数,交点数为偶则不相交为奇数则相交
- <?php
- /**
- * @param $x
- * @param $y
- * @param $points
- * @return boolean|int
- */
- function pointInPolygon($x, $y, $points) {
- if( ($j = count($points)) < 3 ){
- return false;
- }
- $result = 0;
- $j--;
- //左射线
- for ($i = 0; $i < count($points); $i++) {
- if ( ($points[$i]['y'] < $y && $points$j]['y'] >= $y || $points[$j < $y && $points[$i]['y'] >= $y)
- && ($points[$i]['x'] <= $x || $points[$j]['x'] <= $x) ) {
- //两点试:(y-y1)/(y2-y1)=(x-x1)/(x2-x1),即表示过(x1,y1)和(x2,y2)的直线
- //判断水平左射线是否与直线相交
- $result ^= ($points$i]['x'] + ($y - $points[$i) / ($points[$j]['y'] - $points[$i]['y']) * ($points[$j]['x'] - $points[$i]['x']) < $x);
- }
- $j = $i;
- }
-
- return $result;
- ?>
解压密码: detechn或detechn.com
免责声明
本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。
本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。
本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。