php之判断点在多边形内的api
1、判断点在多边形内的数学思想:以那个点为顶点,作任意单向射线,如果它与多边形交点个数为奇数个,那么那个点在多边形内,相关公式:
<?php
class AreaApi{
//$area是一个多边形经纬度集合,$lng是经度,$lat是纬度
function inArea($area,$lng,$lat){
$crossings=0;
for($i=0;$i<count($area);$i++){
$next_poit=$i+1;
if($i==(count($area)-1)){
$next_poit=0;
}
$slope=($area[$next_poit]['lng']-$area[$i]['lng'])/($area[$next_poit]['lat']-$area[$i]['lat']);
$cond1=($area[$i]['lat']<=$lat)&&($lat<$area[$next_poit]['lat']);
$cond2=($area[$next_poit]['lat']<=$lat)&&($lat<$area[$i]['lat']);
$above=($lng<$slope*($lat-$area[$i]['lat'])+$area[$i]['lng']);
if(($cond1||$cond2)&&$above){
$crossings++;
}
}
if($crossings%2!=0){
return 'yes';
}else{
return "no";
}
}
}
2、参考链接:http://blog.csdn.net/shangquan2012/article/details/51912617
php之判断点在多边形内的api的更多相关文章
- zoj 1081 判断点在多边形内
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=81Points Within Time Limit: 2 Second ...
- 判断点在多边形内算法的C++实现
目录 1. 算法思路 2. 具体实现 3. 改进空间 1. 算法思路 判断平面内点是否在多边形内有多种算法,其中射线法是其中比较好理解的一种,而且能够支持凹多边形的情况.该算法的思路很简单,就是从目标 ...
- hdu 1756:Cupid's Arrow(计算几何,判断点在多边形内)
Cupid's Arrow Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- POJ 2318 TOYS | 二分+判断点在多边形内
题意: 给一个矩形的区域(左上角为(x1,y1) 右下角为(x2,y2)),给出n对(u,v)表示(u,y1) 和 (v,y2)构成线段将矩形切割 这样构成了n+1个多边形,再给出m个点,问每个多边形 ...
- ZOJ 1081 Points Within | 判断点在多边形内
题目: 给个n个点的多边形,n个点按顺序给出,给个点m,判断m在不在多边形内部 题解: 网上有两种方法,这里写一种:射线法 大体的思想是:以这个点为端点,做一条平行与x轴的射线(代码中射线指向x轴正方 ...
- R树判断点在多边形内-Java版本
1.什么是RTree 待补充 2.RTree java依赖 rtree的java开源版本在GitHub上:https://github.com/davidmoten/rtree 上面有详细的使用说明 ...
- hdu 1756 判断点在多边形内 *
模板题 #include<cstdio> #include<iostream> #include<algorithm> #include<cstring> ...
- A Round Peg in a Ground Hole - POJ 1584 (判断凸多边形&判断点在多边形内&判断圆在多边形内)
题目大意:首先给一个圆的半径和圆心,然后给一个多边形的所有点(多边形按照顺时针或者逆时针给的),求,这个多边形是否是凸多边形,如果是凸多边形在判断这个圆是否在这个凸多边形内. 分析:判断凸多边形可 ...
- matlab inpolygon 判断点在多边形内
如何判断一个点在多边形内部? xv= [0 3 3 0 0]; %x坐标 yv= [0 0 3 3 0];%y坐标 x=1.5; y=1.5; in=inpolygon(x,y,xv,yv) plot ...
随机推荐
- VMware硬盘空间——扩容
VMware原来分配的硬盘空间太小了--扩容 找到VMware的安装路径,如我是默认安装的:C:\Program Files (x86)\VMware\VMware Workstation,打开该路径 ...
- 多线程编程_控制并发线程数的Semaphore
简介 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源.很多年以来,我都觉得从字面上很难理解Semaphore所表达的含义,只能把它比作是 ...
- java 开发体系参考学习
https://www.oschina.net/question/2663968_2283797
- tomcat直接访问webinfo里的jsp
<servlet> <servlet-name>requestScope.jsp</servlet-name> <jsp-file>/WEB-INF/r ...
- vue router-link 添加在定义事件
在vue学习中遇到给router-link 标签添加事件@click .@mouseover等无效的情况 我想要做的是v-for遍历出来的选项卡, 鼠标移上去出现删除标签,移除标签消失的效果 原代码: ...
- suau 公约公倍
8619 公约公倍 时间限制:500MS 内存限制:1000K 提交次数:475 通过次数:108 题型: 编程题 语言: G++;GCC Description 给定六个正整数a,b,c,d ...
- 解决 eclipse cdt 运行时控制台乱码解决
1 点击黑色 倒三角 按钮 选择 run configurations 2 2.1 点击new 添加 LANG = en_US 2.2 选择 replace native environment wi ...
- 《Flink 源码解析》—— 源码编译运行
更新一篇知识星球里面的源码分析文章,去年写的,周末自己录了个视频,大家看下效果好吗?如果好的话,后面补录发在知识星球里面的其他源码解析文章. 前言 之前自己本地 clone 了 Flink 的源码,编 ...
- httpd.conf 配置
# # This is the main Apache server configuration file. It contains the # configuration directives th ...
- stl::iterator汇总
STL——iterator 一.概述Iterator(迭代器)模式又称Cursor(游标)模式, 根据STL中的分类,iterator包括:Input Iterator:只能单步向前迭代元素,不允许修 ...