資源簡介
圍欄檢測算法,使用的是射線法進行的點與圍欄間的關系

代碼片段和文件信息
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? AyPoint?p1?=?apl.get(k);
AyPoint?p2?=?apl.get(k-1);
//初步判斷?大范圍過濾
if(????(ap.getX()?>?p1.getX()?||?ap.getX()??p1.getX()?||?ap.getX()? ||?(ap.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聊天系統
評論
共有 條評論