寫C語言的實驗用到的一個算法,判斷一個點是否在多邊形的內部。C的代碼如下:
int pnpoly(int nvert, float *vertx, float *verty, float testx, float testy){ int i, j, c = 0; for (i = 0, j = nvert-1; i < nvert; j = i++) { if ( ((verty[i]>testy) != (verty[j]>testy)) && (testx < (vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]) ) c = !c; } return c;}其中nvert是多邊形頂點的個數,vertx和verty分別是多邊形頂點橫、縱坐標的數組,textx和testy是待測點的坐標。這個算法是由W. Randolph Franklin提出的,根據Jordan curve theorem,多邊形將平面分為內外兩個區域,假設待測點在多邊形內部,從待測點引出一條射線必然會與多邊形有至少一個交點。該射線與多邊形第一次相交時將“沖出”多邊形,第二次相交將“進入”多邊形,依此類推,若射線與多邊形有奇數個交點,則該點在多邊形內部,反之則在外部。
PNPoly算法正是從待測點引出一條水平向右的射線,并計算與多邊形的交點個數。解釋一下這段代碼:for (i = 0, j = nvert-1; i < nvert; j = i++)循環的含義就是始終讓j = i 主站蜘蛛池模板: 宜兰市| 健康| 原平市| 锡林浩特市| 拉萨市| 名山县| 扬州市| 都匀市| 休宁县| 资兴市| 施甸县| 商南县| 扶绥县| 韩城市| 慈利县| 滕州市| 凤城市| 桓仁| 孝昌县| 玉溪市| 德格县| 郧西县| 徐水县| 新邵县| 淮北市| 桃江县| 临沭县| 竹山县| 莆田市| 廊坊市| 荣昌县| 武义县| 伊春市| 偏关县| 开封市| 张掖市| 梅河口市| 广东省| 山东省| 郸城县| 广东省|