欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

歡迎來到入門教程網(wǎng)!

C語言

當(dāng)前位置:主頁 > 軟件編程 > C語言 >

C語言實(shí)現(xiàn)的PNPoly算法代碼例子

來源:本站原創(chuàng)|時(shí)間:2020-01-10|欄目:C語言|點(diǎn)擊: 次

寫C語言的實(shí)驗(yàn)用到的一個(gè)算法,判斷一個(gè)點(diǎn)是否在多邊形的內(nèi)部。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是多邊形頂點(diǎn)的個(gè)數(shù),vertx和verty分別是多邊形頂點(diǎn)橫、縱坐標(biāo)的數(shù)組,textx和testy是待測點(diǎn)的坐標(biāo)。這個(gè)算法是由W. Randolph Franklin提出的,根據(jù)Jordan curve theorem,多邊形將平面分為內(nèi)外兩個(gè)區(qū)域,假設(shè)待測點(diǎn)在多邊形內(nèi)部,從待測點(diǎn)引出一條射線必然會與多邊形有至少一個(gè)交點(diǎn)。該射線與多邊形第一次相交時(shí)將“沖出”多邊形,第二次相交將“進(jìn)入”多邊形,依此類推,若射線與多邊形有奇數(shù)個(gè)交點(diǎn),則該點(diǎn)在多邊形內(nèi)部,反之則在外部。

PNPoly算法正是從待測點(diǎn)引出一條水平向右的射線,并計(jì)算與多邊形的交點(diǎn)個(gè)數(shù)。解釋一下這段代碼:for (i = 0, j = nvert-1; i < nvert; j = i++)循環(huán)的含義就是始終讓j = i – 1,如果i = 0那么j = nvert – 1,從而依次檢驗(yàn)多邊形的每條邊。接下來的重點(diǎn)就是條件語句,(verty[i]>testy) != (verty[j]>testy)很好理解,就是一條邊上的兩個(gè)頂點(diǎn)分別在待測點(diǎn)的上方和下方,通過這條語句可以知道從待測點(diǎn)向右引出的射線有可能與該條邊相交(只要待測點(diǎn)在邊的左側(cè)即可)。

但具體判斷相交就要交給解析幾何了。建系寫出該條邊所在直線的方程:

變形一下:

代入待測點(diǎn)坐標(biāo),根據(jù)圖形關(guān)系得到這個(gè)不等式:

也就是語句testx < vertx[j]-vertx[i]) * (testy-verty[i]) / (verty[j]-verty[i]) + vertx[i]了.
 

上一篇:C++實(shí)現(xiàn)各種排序算法類匯總

欄    目:C語言

下一篇:C++類模板與模板類深入詳解

本文標(biāo)題:C語言實(shí)現(xiàn)的PNPoly算法代碼例子

本文地址:http://mengdiqiu.com.cn/a1/Cyuyan/3611.html

網(wǎng)頁制作CMS教程網(wǎng)絡(luò)編程軟件編程腳本語言數(shù)據(jù)庫服務(wù)器

如果侵犯了您的權(quán)利,請與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權(quán)所有