资源简介
围栏检测算法,使用的是射线法进行的点与围栏间的关系
代码片段和文件信息
package Region;
import java.util.List;
/*
* 围栏点判断类
*/
public class AnalysisPointAndRegion {
private static double _dis = 0.0000000001;
public static Boolean judgeMeetPoint(AyPoint apList apl){
//检测点为空或围栏为空,返回false
if(ap == null || apl == null) return false;
//检测围栏数组
int len = apl.size();
if(len <3) return false;
//交点数
int meetPointCount = 0;
//围栏判断
for(int k = 1 ; k < len; k++){
AyPoint p1 = apl.get(k);
AyPoint p2 = apl.get(k-1);
//初步判断 大范围过滤
if( (ap.getX() > p1.getX() || ap.getX() < p2.getX() || (ap.getX() > p1.getX() || ap.getX() < p2.getX()))//x坐标在顶点线段范围外
|| (ap.getY() < p1.getY() && ap.getY() < p2.getY()))
continue;
/*
* 检测点在线段范围内,进行交点计算
*/
//点在线上,认为在围栏内,则可返回true了
if(judgePointInLine(p1p2ap))
return true;
//处理特殊情况,交点是端点的情况
double temp;
//temp相当于被除数(斜率的分母)
temp = p1.getX() - p2.getX();
if (temp >= -_dis && temp <= _dis){
//处理交点情况
double dx = ap.getX() - p1.getX();
if(dx < -_dis || dx > _dis) continue;
int[] indexs = new int[2];
indexs[0] = 0;
indexs[1] = 0;
indexs = getNotSame(aplk);
AyPoint lineP1 = apl.get(indexs[0]);
AyPoint lineP2 = apl.get(indexs[1]);
if( k> indexs[0])
break;
else
k = indexs[0] + 1;
if( (ap.getY() > p1.getY())
&& ( (ap.getX() >= lineP1.getX() && ap.getX() <= lineP2.getX())
|| (ap.getX() >= lineP2.getX() && ap.getX() <= lineP2.getX())
)
)
meetPointCount++;
}else{
double kk;
double bb;
double meetPtX;
double meetPtY;
kk = (p1.getY() - p2.getY()) / (p1.getX() - p2.getX());
bb = p1.getY() - kk * p1.getX();
meetPtY = kk * ap.getX() + bb;
meetPtX = ap.getX();
//处理特殊情况,交点是端点的情况
double dx = meetPtX - p1.getX();
double dy = meetPtY - p1.getY();
double dx2 = meetPtX - p2.getX();
double dy2 = meetPtY - p2.getX();
if(dx >= -_dis && dx <= _dis && dy >= -_dis && dy <= _dis){
AyPoint p3;
if(k == 1){
p3 = apl.get(len - 2);
}else{
p3 = apl.get(k - 2);
}
//提取交点的上下两点分别在垂线的两侧
if( (ap.getY() > meetPtY)
&& ((meetPtX >= p3.getY() && meetPtX <= p2.getX())
|| (meetPtX >= p2.getX() && meetPtX <= p3
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-12-03 09:31 IsPointInRegion\
文件 301 2013-12-03 09:31 IsPointInRegion\.classpath
文件 391 2013-12-03 09:31 IsPointInRegion\.project
目录 0 2013-12-03 09:31 IsPointInRegion\.settings\
文件 598 2013-12-03 09:32 IsPointInRegion\.settings\org.eclipse.jdt.core.prefs
目录 0 2013-12-03 11:27 IsPointInRegion\bin\
目录 0 2013-12-03 11:27 IsPointInRegion\bin\Region\
文件 3987 2013-12-03 11:27 IsPointInRegion\bin\Region\AnalysisPointAndRegion.class
文件 510 2013-12-03 11:27 IsPointInRegion\bin\Region\AyPoint.class
文件 1593 2013-12-03 11:51 IsPointInRegion\bin\Region\TestRegion.class
目录 0 2013-12-03 11:27 IsPointInRegion\src\
目录 0 2013-12-03 11:27 IsPointInRegion\src\Region\
文件 5331 2013-12-03 11:27 IsPointInRegion\src\Region\AnalysisPointAndRegion.java
文件 433 2013-12-03 11:27 IsPointInRegion\src\Region\AyPoint.java
文件 734 2013-12-03 11:51 IsPointInRegion\src\Region\TestRegion.java
- 上一篇:jsp.rar
- 下一篇:java实现的类似qq聊天系统
相关资源
- java实现的类似qq聊天系统
- java 实现旋转的八卦
- javaSound
- Java实现的AES/CBC/NoPadding方式实现的文
- javaSwing(源码)
- 即时通信系统java
- Qrcode生成二维码Java web项目方法
- 《Java 基础入门传智播客出品》_中文
- Head First_深入浅出Java(中文第2版)
- java人物行走
- java des算法实现加密文字以及图片
- beiyou Java作业 -4
- jsp+servlet+javabean jdbc连接数据库 用户登
- java中国象棋打谱软件
- 决策树算法--java
- 朴素贝叶斯java代码
- java编写的抽象工厂迷宫,文字式,非
- java迭代器模式实现正反向遍历
- Java程序员面试笔试宝典附录答案与勘
- java求解素数环问题
- 用Java写的一个简单爬虫,爬取京东图
- 基于Java_Web的小型酒店管理系统_徐耀
- java局域网聊天模拟qq
- 基于java的推荐系统实现源代码
- 用java编程语言RC4算法的加密和解密
- JAVAWEB录音上传服务器
- Java设计模式综合应用场景
- 计算机操作系统大作业—进程控制模
- java web 网上商城项目源码(jspservlet
- java网上商城项目源码jsp.servlet+javabe
评论
共有 条评论