


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
再經典不過的算法了://功能:判斷點是否在多邊形內//方法:求解通過該點的水平線與多邊形各邊的交點//結論:單邊交點為奇數,成立!//參數://POINTp指定的某個點//LPPOINTptPolygon多邊形的各個頂點坐標(首末點可以不一致)//intnCount多邊形定點的個數BOOLPtInPolygon(POINTp,LPPOINTptPolygon,intnCount){intnCross=0;for(inti=0;i<nCount;i++){POINTp1=ptPolygon[i];POINTp2=ptPolygon[(i+1)%nCount];//求解y=p.y與p1p2的交點if(p1.y==p2.y)//p1p2與y=p0.y平行continue;if(p.y<min(p1.y,p2.y))//交點在p1p2延長線上continue;if(p.y>=max(p1.y,p2.y))//交點在p1p2延長線上continue;//求交點的X坐標--------------------------------------------------------------doublex=(double)(p.y-p1.y)*(double)(p2.x-p1.x)/(double)(p2.y-p1.y)+p1.x;if(x>p.x)nCross++;//只統計單邊交點}//單邊交點為偶數,點在多邊形之外---return(nCross%2==1);}1.叉乘判別法(只適用于凸多邊形)想象一個凸多邊形,其每一個邊都將整個2D屏幕劃分成為左右兩邊,連接每一邊的第一個端點和要測試的點得到一個矢量v,將兩個2維矢量擴展成3維的,然后將該邊與v叉乘,判斷結果3維矢量中Z分量的符號是否發生變化,進而推導出點是否處于凸多邊形內外。這里要注意的是,多邊形頂點究竟是左手序還是右手序,這對具體判斷方式有影響。2.面積判別法(只適用于凸多邊形)第四點分別與三角形的兩個點組成的面積分別設為S1,S2,S3,只要S1+S2+S3>原來的三角形面積就不在三角形范圍中.可以使用海倫公式。推廣一下是否可以得到面向凸多邊形的算法?(不確定)3.角度和判別法(適用于任意多邊形)doubleangle=0;realPointList::iteratoriter1=points.begin();for(realPointList::iteratoriter2=(iter1+1);iter2<points.end();++iter1,++iter2){doublex1=(*iter1).x-p.x;doubley1=(*iter1).y-p.y;doublex2=(*iter2).x-p.x;doubley2=(*iter2).y-p.y;angle+=angle2D(x1,y1,x2,y2);}if(fabs(angle-span::PI2)<0.01)returntrue;elsereturnfalse;另外,可以使用boundingbox來加速。if(p.x<(*iter)->boundingBox.left||p.x>(*iter)->boundingBox.right||p.y<(*iter)->boundingBox.bottom||p.y>(*iter)->boundingBox.top)。。。。。。對于多邊形來說,計算boundingbox非常的簡單。只需要把水平和垂直方向上的最大最小值找出來就可以了。對于三角形:第四點分別與三角形的兩個點的交線組成的角度分別設為j1,j2,j3,只要j1+j2+j3>360就不在三角形范圍中。4.水平/垂直交叉點數判別法(適用于任意多邊形)注意到如果從P作水平向左的射線的話,如果P在多邊形內部,那么這條射線與多邊形的交點必為奇數,如果P在多邊形外部,則交點個數必為偶數(0也在內)。所以,我們可以順序考慮多邊形的每條邊,求出交點的總個數。還有一些特殊情況要考慮。假如考慮邊(P1,P2),1)如果射線正好穿過P1或者P2,那么這個交點會被算作2次,處理辦法是如果P的從坐標與P1,P2中較小的縱坐標相同,則直接忽略這種情況2)如果射線水平,則射線要么與其無交點,要么有無數個,這種情況也直接忽略。3)如果射線豎直,而P0的橫坐標小于P1,P2的橫坐標,則必然相交。4)再判斷相交之前,先判斷P是否在邊(P1,P2)的上面,如果在,則直接得出結論:P再多邊形內部。射線算法1.已知點point(x,y)和多邊形Polygon(x1,y1;x2,y2;….xn,yn;);2.以point為起點,以無窮遠為終點作平行于X軸的直線line(x,y;-∞,y);3.循環取得(for(i=0;i<n;i++))多邊形的每一條邊side(xi,yi;xi+1,yi+1),且判斷是否平行于X軸,如果平行continue,否則,i++;4.同時判斷point(x,y)是否在side上,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 山東財經大學《數字科技前沿》2023-2024學年第二學期期末試卷
- 南昌航空大學《土力學含實驗》2023-2024學年第二學期期末試卷
- 呂梁學院《軟筆書法》2023-2024學年第二學期期末試卷
- 牡丹江師范學院《算法設計與分析Ⅲ》2023-2024學年第二學期期末試卷
- 南陽理工學院《IntroductiontoMicroprocessors》2023-2024學年第二學期期末試卷
- 上海工藝美術職業學院《醫學分子生物學實驗技術》2023-2024學年第一學期期末試卷
- 南充科技職業學院《生態學原理》2023-2024學年第二學期期末試卷
- 天津理工大學中環信息學院《中學化學教學方法與理論》2023-2024學年第二學期期末試卷
- 二零二五范文公園游樂場地租賃合同
- 護坡承包合同書范例
- 公交車輛輕量化與節能技術
- 醫院納入定點后使用醫療保障基金的預測性分析報告
- 數據庫運維培訓
- 影視廣告賞析(哈爾濱師范大學)智慧樹知到期末考試答案2024年
- 培訓機構與家長溝通技巧
- 醫療機構執業登記匯報
- 保安交通安全常識教育
- 2022年10月自考00883學前特殊兒童教育試題及答案含解析
- 【海南康養旅游現狀和對策探究11000字(論文)】
- 《浙江省建筑垃圾資源化利用技術導則》
- (高清版)DZT 0002-2017 含煤巖系鉆孔巖心描述
評論
0/150
提交評論