判断点是否在多边形内

本文阅读 1 分钟
首页 PHP笔记 正文

射线发判断点是否在多边形内,即平面坐标内以目标点水平做一条射线,看这条射线与多边形边交点数,交点数为偶则不相交为奇数则相交

  1. <?php
  2. /**
  3. * @param $x
  4. * @param $y
  5. * @param $points
  6. * @return boolean|int
  7. */
  8. function pointInPolygon($x,&nbsp;$y, $points) {
  9. if( ($j&nbsp;=&nbsp;count($points)) < 3 ){
  10. return false;
  11. }
  12. $result = 0;
  13. $j--;
  14. //左射线
  15. for ($i&nbsp;=&nbsp;0;&nbsp;$i < count($points);&nbsp;$i++) {
  16. if ( ($points[$i]['y'] < $y&nbsp;&amp;&amp;&nbsp;$points$j][&#39;y&#39;]&nbsp;&gt;=&nbsp;$y || $points[$j < $y&nbsp;&amp;&amp;&nbsp;$points[$i][&#39;y&#39;]&nbsp;&gt;=&nbsp;$y)
  17. && ($points[$i]['x'] <= $x&nbsp;||&nbsp;$points[$j][&#39;x&#39;]&nbsp;&lt;=&nbsp;$x) ) {
  18. //两点试:(y-y1)/(y2-y1)=(x-x1)/(x2-x1),即表示过(x1,y1)和(x2,y2)的直线
  19. //判断水平左射线是否与直线相交
  20. $result&nbsp;^=&nbsp;($points$i][&#39;x&#39;]&nbsp;+&nbsp;($y - $points[$i) / ($points[$j]['y'] - $points[$i]['y']) * ($points[$j]['x'] - $points[$i]['x']) < $x);
  21. }
  22. $j&nbsp;=&nbsp;$i;
  23. }
  24. return $result;
  25. ?>
解压密码: detechn或detechn.com

免责声明

本站所有资源出自互联网收集整理,本站不参与制作,如果侵犯了您的合法权益,请联系本站我们会及时删除。

本站发布资源来源于互联网,可能存在水印或者引流等信息,请用户自行鉴别,做一个有主见和判断力的用户。

本站资源仅供研究、学习交流之用,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担。

dump函数-浏览器友好的变量输出
« 上一篇 04-12
PHP冒泡排序
下一篇 » 04-15

发表评论