:V1J^V4,V6;劃分的三角形區(qū)域分別為:Δ V7ViV2,Δ V2V3V4,Δ V2V4V5,Δ V5V6V7,Δ V5V7V2。
[0056]S4、將監(jiān)測(cè)點(diǎn)代入S3中產(chǎn)生的三角形的區(qū)域方程,判斷監(jiān)測(cè)點(diǎn)與面狀區(qū)域的拓?fù)潢P(guān)系
[0057](I)按照S3中的三角形區(qū)域的存儲(chǔ)順序,提取一個(gè)三角形區(qū)域,按照S2中點(diǎn)與三角形區(qū)域拓?fù)潢P(guān)系的判斷方法進(jìn)行監(jiān)測(cè)點(diǎn)與該三角形區(qū)域拓?fù)潢P(guān)系的判斷。
[0058](2)如果判斷出監(jiān)測(cè)點(diǎn)在該三角形內(nèi)部,則表明該監(jiān)測(cè)點(diǎn)在面狀區(qū)域內(nèi)部,監(jiān)測(cè)點(diǎn)與面狀區(qū)域的拓?fù)潢P(guān)系判斷結(jié)束。
[0059](3)如果判斷出監(jiān)測(cè)點(diǎn)在三角形的邊界上,則進(jìn)一步判斷所在的三角形邊界是否為面狀區(qū)域的邊界:如果是面狀區(qū)域的邊界,表明該監(jiān)測(cè)點(diǎn)在面狀區(qū)域的邊界,否則,表明該監(jiān)測(cè)點(diǎn)在面狀區(qū)域內(nèi)部,監(jiān)測(cè)點(diǎn)與面狀區(qū)域的拓?fù)潢P(guān)系判斷結(jié)束。
[0060](4)如果判斷出監(jiān)測(cè)點(diǎn)不在該三角形內(nèi)部或邊界,判斷是否還有未被判別的三角形區(qū)域,如果沒有,則表明監(jiān)測(cè)點(diǎn)在面狀區(qū)域外部,監(jiān)測(cè)點(diǎn)與面狀區(qū)域的拓?fù)潢P(guān)系判斷結(jié)束;否則,另取一個(gè)三角形區(qū)域進(jìn)行操作,即重復(fù)(I)操作。
[0061]相比于現(xiàn)有技術(shù)的缺點(diǎn)和不足,本發(fā)明具有以下有益效果:本發(fā)明提供一種效率較高、使用于任意面狀區(qū)域與點(diǎn)的拓?fù)潢P(guān)系判斷方法,能夠適用于任意形狀的面狀區(qū)域,具有通用性;本發(fā)明不僅能夠判斷點(diǎn)與面的包含和相離狀態(tài),而且適合判斷點(diǎn)是否在面的邊界上;本發(fā)明在一定程度上降低了算法復(fù)雜度,當(dāng)存在監(jiān)測(cè)點(diǎn)在存儲(chǔ)的第一個(gè)三角形區(qū)域內(nèi)部或邊界情況時(shí),所需要的計(jì)算量最小。
【附圖說明】
[0062]圖1所示為用于構(gòu)建三角形區(qū)域方程的圖例;
[0063]圖2所示為將面狀區(qū)域劃分為三角形區(qū)域的流程圖;
[0064]圖3所示為凸多邊形邊界面狀區(qū)域的三角區(qū)域劃分示意圖;
[0065]圖4所示為凹多邊形邊界面狀區(qū)域的三角區(qū)域劃分示意圖;
[0066]圖5所示為點(diǎn)與復(fù)雜面狀區(qū)域拓?fù)潢P(guān)系判斷示意圖。
【具體實(shí)施方式】
[0067]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0068]本實(shí)例中的面狀區(qū)域如圖5所示,共有13個(gè)頂點(diǎn),頂點(diǎn)按逆時(shí)針存儲(chǔ),V1*起始頂點(diǎn),Vi3為終止頂點(diǎn);監(jiān)測(cè)點(diǎn)為A和B。
[0069]實(shí)例操作一:根據(jù)公式9構(gòu)建三角形區(qū)域方程,主要用到的函數(shù)模塊為
[0070]private double TriangleAreaEquat1n(double x,double y,double xl,double yl ,double x2 ,double y2,double x3 ,double y3):xl、yl、x2、y2、x3、y3為三角形頂點(diǎn)坐標(biāo);X、y為監(jiān)測(cè)點(diǎn)坐標(biāo)ο
[0071]實(shí)例操作二:確定點(diǎn)與三角形區(qū)域拓?fù)潢P(guān)系的判斷方法,主要用到的函數(shù)模塊為:
[0072]private int Topo1gyPointTriangle(double x,double y,double xl,doubleyl,double x2,double y2 ,double x3 ,double y3):xl、yl、x2、y2、x3、y3為三角形頂點(diǎn)坐標(biāo);x、y為監(jiān)測(cè)點(diǎn)坐標(biāo);返回值0表示點(diǎn)在三角形區(qū)域內(nèi)部,I表示點(diǎn)在三角形區(qū)域邊界,2表示點(diǎn)在三角形區(qū)域外部;該函數(shù)調(diào)用TriangleAreaEquat1n()函數(shù)完成主要計(jì)算功能。
[0073]private bool PointAtLine(double xl,double yI,double x2,double y2,double x3,double y3):用于判斷三點(diǎn)是否共線;xl、yl、x2、y2、x3、y3為待測(cè)頂點(diǎn)坐標(biāo);返回值true表示共線,false表示不共線。
[0074]實(shí)例操作三:根據(jù)面狀區(qū)域的頂點(diǎn)的存儲(chǔ)順序,依次判斷頂點(diǎn)的凹凸性,主要用到的函數(shù)模塊為:private bool ConvexOrConcave(double xl, double yI, double x2 ,double y2 ,double x3 ,double y3):xl、yl、x2、y2、x3、y3為三個(gè)頂點(diǎn)坐標(biāo);返回值true表示頂點(diǎn)呈凸性,false表示頂點(diǎn)呈凹性。將凹頂點(diǎn)和凸頂點(diǎn)分別存儲(chǔ)于一維數(shù)組,操作結(jié)果:凹頂點(diǎn)數(shù)組ArrayConcave[V2,V4,V8,V9];凸頂點(diǎn)數(shù)組ArrayConvex[Vi,V3,V5,V6,V7, V1,Vii,V12,Vi3 ]。頂點(diǎn)的存儲(chǔ)順序數(shù)組 Con vex [ Vi ,V2 ,V3 ,V4jVs ,V6, Vt ,Vs, V9, V1, Vn ,V12 ,Vi3] ο
[0075](I)對(duì)凸頂點(diǎn)¥1進(jìn)行操作,連接與¥工相鄰的兩個(gè)頂AVdPV13,首先利用函數(shù)P ο i n t A t L i n e ()判斷V13、VI和V 2不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangle()函數(shù)判斷出Δ V13V1V2中不包含其他頂點(diǎn),因此保存該三角形的I D為I,保存V13、VdP V2的頂點(diǎn)坐標(biāo),在數(shù)組ArrayConvex中刪除V1 ;利用函數(shù)(:0爪^(^01^代()判斷刪除¥1后¥2和¥13的凹凸性,可以得出¥2和¥13的凹凸性沒有發(fā)生變化,因此頂點(diǎn)的存儲(chǔ)結(jié)果為:凹頂點(diǎn)數(shù)組ArrayConcave[V2,V4,Vs,V9];凸頂點(diǎn)數(shù)組ArrayConvex[V3,V5,V6,V7,V1,Vn,Vi2,Vi3];頂點(diǎn)的存儲(chǔ)順序數(shù)組Convex[V2,V3,V4,V5,V6,
V7,V8,V9,VlO,Vll,Vl2,Vl3]o
[0076](2)對(duì)凸頂點(diǎn)V3進(jìn)行操作,連接與V3相鄰的兩個(gè)頂點(diǎn)Vi^PV4,首先利用函數(shù)Po intAtLine ()判斷V 2、V 3和V 4不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangleO函數(shù)判斷出Δ V2V3V4中不包含其他頂點(diǎn),因此保存該三角形的ID為2,保存V2、V3和V4的頂點(diǎn)坐標(biāo),在數(shù)組ArrayConvex中刪除V3;利用函數(shù)ConvexOrConcave()判斷刪除V3后VdPV4的凹凸性,可以得出VdPV4的凹凸性沒有發(fā)生變化,因此頂點(diǎn)的存儲(chǔ)結(jié)果為:凹頂點(diǎn)數(shù)組ArrayConcave [V2,V4,V8, Vg];凸頂點(diǎn)數(shù)組ArrayConvex[V5,V6,V7, V10,V11,V12,V13];頂點(diǎn)的存儲(chǔ)順序數(shù)組Convex[V2,V4jVs,V6,Vt,Vs,V9,V10,Vn ,V12,V13] ο
[0077](3)對(duì)凸頂AV5進(jìn)行操作,連接與Vdg鄰的兩個(gè)頂點(diǎn)V4和V6,首先利用函數(shù)Po intAtLine ()判斷V 4、V 5和V 6不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangleO函數(shù)判斷出Δ V4V5V6中包含頂點(diǎn)Vs,貝Ij舍棄處理V5,頂點(diǎn)的存儲(chǔ)結(jié)果不變。
[0078]( 4 )對(duì)凸頂點(diǎn)V 6進(jìn)行操作,連接與V 6相鄰的兩個(gè)頂點(diǎn)V 5和V 7,首先利用函數(shù)Po intAtLine ()判斷V 5、V 6和V 7不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangleO函數(shù)判斷出Δ V5V6V7中包含頂點(diǎn)Vs,貝Ij舍棄處理V6,頂點(diǎn)的存儲(chǔ)結(jié)果不變。
[0079](7)對(duì)凸頂點(diǎn)V7進(jìn)行操作,連接與V7相鄰的兩個(gè)頂點(diǎn)V6和V8,首先利用函數(shù)Po intAtLine ()判斷V 6、V 7和V 8不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangleO函數(shù)判斷出Δ V6V7V8中不包含其他頂點(diǎn),因此保存該三角形的ID為3,保存V6、V7和Vs的頂點(diǎn)坐標(biāo),在數(shù)組ArrayConvex中刪除V7;利用函數(shù)ConvexOrConcave()判斷刪除V7后V6和V8的凹凸性,可以得出V6和V8的凹凸性沒有發(fā)生變化,因此頂點(diǎn)的存儲(chǔ)結(jié)果為:凹頂點(diǎn)數(shù)組ArrayConcave[V2,V4,V8, Vg];凸頂點(diǎn)數(shù)組ArrayConvex[V5,V6, V1 ,Vii,Vi2lVi3];頂點(diǎn)的存儲(chǔ)順序數(shù)組 Con vex [ V2 ,V4, Vs, V6 ,Vs, V9, V10, Vn ,V12, V13] ο
[0080](8)對(duì)凸頂AV1Q進(jìn)行操作,連接與¥1()相鄰的兩個(gè)頂點(diǎn)V9和V11,首先利用函數(shù)PointAtLineO判斷V9、Viq和V11共線,則刪除頂點(diǎn)Viq的存儲(chǔ),因此頂點(diǎn)的存儲(chǔ)結(jié)果為:凹頂點(diǎn)數(shù)組ArrayConcave[V2,V4,Vs,Vg];凸頂點(diǎn)數(shù)組ArrayConvex[V5,V6,V11,Vi2,Vi3];頂點(diǎn)的存儲(chǔ)順序數(shù)組Convex[V2,V4jVs,V6,Vs1V9,Vn ,V12,V13] ο
[0081](9)對(duì)凸頂點(diǎn)Vn進(jìn)行操作,連接與Vn相鄰的兩個(gè)頂點(diǎn)V9和V12,首先利用函數(shù)P ο i n t A t L i n e ()判斷V 9、V11和V12不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangle()函數(shù)判斷出Δ V9V11V12中不包含其他頂點(diǎn),因此保存該三角形的ID為4,保存V9 J11和V12的頂點(diǎn)坐標(biāo),在數(shù)組ArrayConvex中刪除V11 ;利用函數(shù)ConvexOrConcaveO判斷刪除V11后V9和V12的凹凸性,可以得出V9和V12的凹凸性沒有發(fā)生變化,因此頂點(diǎn)的存儲(chǔ)結(jié)果為:凹頂點(diǎn)數(shù)組ArrayConcave[V2,V4,Vs,V9];凸頂點(diǎn)數(shù)組ArrayConvex[Vs, V6, V12, Vi3];頂點(diǎn)的存儲(chǔ)順序數(shù)組(>)11¥6叉[¥2,¥4,¥5,¥6,¥8,¥9,¥12,¥13]。
[0082](10)對(duì)凸頂點(diǎn)V12進(jìn)行操作,連接與V12相鄰的兩個(gè)頂點(diǎn)VdPV13,首先利用函數(shù)P ο i n t A t L i n e ()判斷V 9、V12和V13不共線,表明能夠形成三角形區(qū)域;然后利用TopologyPointTriangle()函數(shù)判斷出Δ V9V12V13中不包含其他頂點(diǎn),因此保存該三角形的ID為5,保存V9、V12