问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

已知一个多边形的所有顶点坐标,如果确定一点是否在这个多边形内?js或php 请给出代码 在线等谢谢

发布网友 发布时间:2022-04-29 09:43

我来回答

2个回答

懂视网 时间:2022-04-29 14:04

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; //在内

 29d36d286d4e908f40eb121030c365b.png

更多PHP相关知识,请访问PHP教程!

热心网友 时间:2022-04-29 11:12

原理:从要判断的点向x轴发射一条射线,如果射线与多边形的边有偶数次相交,那么点不在多边形内;奇数次相交,那么点在多边形内
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk">
<title>img usemap属性</title>
</head>
<script>

function isPointInLine(point,linePoint1,linePoint2)
{
//是否一个点向x轴的射线穿透线段,有交点
var maxY=(linePoint1.y>linePoint2.y)?linePoint1.y:linePoint2.y;
var minY=(linePoint1.y<linePoint2.y)?linePoint1.y:linePoint2.y;
//alert("maxY" + maxY);
//alert("minY = " + minY);
var re=false;
if(point.y<maxY && point.y>=minY)
{
a1 = point.x;
a2 = (linePoint2.x-linePoint1.x)*(point.y-linePoint1.y)/(linePoint2.y-linePoint1.y);
//alert(a1);
//alert(a2);
//alert(a1 <= a2);
if(parseFloat(point.x) <= parseFloat(( linePoint1.x+(linePoint2.x-linePoint1.x)*(point.y-linePoint1.y)/(linePoint2.y-linePoint1.y) )) )
{
re=true;
}
}
//alert("point :" + point.x + ":" + point.y + ";")
//alert("linePoint1 :" + linePoint1.x + ":" + linePoint1.y + ";")
//alert("linePoint2 :" + linePoint2.x + ":" + linePoint2.y + ";")
//alert(re);
return(re);
}

function isPointInPolygon(point,poly)
{
//是否点在多边形里
var crossNum=0;
var re=true;
for(var i=0;i<poly.length-1;i++)
{
if(isPointInLine(point,poly[i],poly[i+1]))
{
crossNum++;
}
}

if((crossNum % 2)==0)
{
re=false;
}

return(re);
}

function clickme()
{
var pa = document.getElementById("point").value.split(",");
var p = {x:pa[0],y:pa[1]};

var poa = document.getElementById("poly").value.split(",");
var po = new Array();
for(var i=0;i<poa.length/2;i++){
po[i]={x:poa[2*i],y:poa[2*i+1]};
};
//for(var i=0;i<po.length;i++)
//{
// alert(po[i].x);
// alert(po[i].y);
//}

//alert(p.x);
//alert(p.y);

alert(isPointInPolygon(p,po));
}
</script>

<body>
<br>
<input type="text" id="point" value="0.5,0.49" />点的横竖坐标,用逗号分隔
<br>
<input type="text" id="poly" value="0,0,0.75,0.75,1,0,1,1,0,1" />按照逆时针方向 多边形点的横竖坐标坐标0
<input type="button" id="btn" value="点击我" onclick="clickme();">
</body>
</html>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
下载了优酷播放器iku免登录版,安装在没联网的电脑上。查看不了本地的... 播放FLV的几个问题在线等 劲舞团真的有那么好玩吗? 为什么别人说劲舞团是世界上最淫荡的游戏.. 劲舞团好玩吗?? 030221 1020 060414 2168 060417 这几组数是什么意思啊!有知道的大哥请... ...分签约短信服务-【广东农信】”是什么意思? 2168是什么意思爱情 事业单位面试成绩79分算好的吗 事业编面试成绩76分算高分吗 cmmi的意义是什么,CMMI的实施过程,CMMI的评估是什么 CMMI中组织级QA问题 做CMMI过程改进的目的有哪些??? 怎么才能让安卓手机像苹果一样下面有个白色的框框? 有过程改进的咨询师么CMMI方面 苹果手机下面的横条别的手机怎么下载? cmmi过程改进方面有哪些地方做得比较好 请问小米手机能不能弄一个像iPhone X一样的底部横条? 软件如何用CMMI改进过程? 苹果下面的横条安卓怎么设置 安卓手机怎么设置苹果手机下面的那条横线? 实施CMM/CMMI时必须解决的认识问题 如何利用CMMI实施软件过程改进 CMM中的已定义级是许多组织努力的目标,该级别的核心内容是什么? 苹果6p有什么办法不那么卡 iPhone6数据线连接不上电脑怎么办 苹果6手机充电没问题,数据线也没问题。电脑驱动也没问题。但是手机连接不上电脑充电。 iphone6开不了机 按开机键显示白苹果页面 能正常充电 但是连接不上电脑 iPhone 6数据线连接电脑没反应怎么办? 电脑提示储存空间不足无法处理此命令 焖烧杯煮白粥要多久 cmmi在过程改进框架中处于什么位置,有什么作用 软件过程改进的过程改进例子及流程说明 CMMI管理过程有哪些 焖烧壶怎么煮粥多长时间 关于CMMI-过程集成与产品改进指南 焖烧杯煮粥怎么做 焖烧罐焖小米粥要多久 用焖烧杯煮粥要多久 大约三,四个小时 象印焖烧杯怎么用熬粥 焖烧杯一般焖熟薏米粥要多长时间 焖烧杯煮粥可以吃多长时间 为什么焖烧壶煮粥,米是生的,煮不熟 safari翻译网页不见了 ios15 苹果浏览器翻译功能为什么点不了 苹果浏览器如何翻译网页 点与多边形的关系 请问谁知道?车贷怎么申请提前还款,谢谢 提前还款手续要怎么办理? 车贷提前还款如何办理?