最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2014年07月14日 09:21:22   投稿:junjie  
這篇文章主要介紹了C語言實現(xiàn)的PNPoly算法代碼例子,PNPoly算法j是判斷一個坐標點是否在不規(guī)則多邊形內(nèi)部的算法,需要的朋友可以參考下

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

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

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

變形一下:

代入待測點坐標,根據(jù)圖形關系得到這個不等式:

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

相關文章

  • 舉例講解C語言對歸并排序算法的基礎使用

    舉例講解C語言對歸并排序算法的基礎使用

    這篇文章主要介紹了C語言對歸并排序算法的使用,歸并排序算法的平均事件復雜度為(n\log n),需要的朋友可以參考下
    2016-05-05
  • 一篇文章帶你了解C語言二分查找的簡單應用

    一篇文章帶你了解C語言二分查找的簡單應用

    這篇文章主要介紹了二分查找算法在C語言程序中的使用示例,文中最后提到了使用二分查找法一個需要注意的地方,需要的朋友可以參考下
    2021-08-08
  • 一文徹底搞懂IO底層原理

    一文徹底搞懂IO底層原理

    我們今天要給大家講的底層的IO看上去簡單,實則抽象。并且在它之上衍生出了語言層面用于實戰(zhàn)的技術,比如我們熟悉的java語言中的NIO或者像Netty這樣的框架
    2021-06-06
  • C++實現(xiàn)教職工信息管理系統(tǒng)

    C++實現(xiàn)教職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C++實現(xiàn)教職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C/C++ 原生API實現(xiàn)線程池的方法

    C/C++ 原生API實現(xiàn)線程池的方法

    線程池,簡單來說就是有一堆已經(jīng)創(chuàng)建好的線程,接下來通過本文給大家介紹C/C++ 原生API實現(xiàn)線程池的方法,感興趣的朋友跟隨小編一起看看吧
    2021-11-11
  • 使用Matlab制作簡易版八分音符醬游戲

    使用Matlab制作簡易版八分音符醬游戲

    八分音符醬作為一款聲音控制類游戲,當時還是很受大家的喜愛的。本文將用Matlab制作一款簡易版的八分音符醬游戲,感興趣的可以學習一下
    2022-02-02
  • 如何讓Dev-C++支持auto關鍵字呢

    如何讓Dev-C++支持auto關鍵字呢

    這篇文章主要介紹了如何讓Dev-C++支持auto關鍵字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 詳解c++中的異常

    詳解c++中的異常

    程序在運行過程中,有對也就有錯,正確那么就不用說了,但是如果錯誤,那么我們?nèi)绾慰焖俚亩ㄎ坏藉e誤的位置,以及知道發(fā)生了什么錯誤。當一個函數(shù)發(fā)現(xiàn)自己無法處理的異常,就會拋出一個異常,讓函數(shù)調(diào)用者直接或者間接的處理這個錯誤。本文將詳解介紹c++中的異常
    2021-06-06
  • C語言實現(xiàn)密碼本小項目

    C語言實現(xiàn)密碼本小項目

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)密碼本小項目,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • C++基于棧實現(xiàn)鐵軌問題

    C++基于棧實現(xiàn)鐵軌問題

    這篇文章主要介紹了C++基于棧實現(xiàn)鐵軌問題,實例分析了C++使用棧實現(xiàn)鐵軌問題的思路與解決方法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-04-04

最新評論

吕梁市| 柘城县| 南皮县| 台山市| 岳池县| 翁源县| 安阳县| 含山县| 天柱县| 垫江县| 宁陵县| 巴彦县| 石景山区| 瑞安市| 霸州市| 称多县| 弥渡县| 凤凰县| 颍上县| 北川| 湘潭市| 怀来县| 盐源县| 肇源县| 日喀则市| 彭泽县| 富宁县| 东莞市| 赞皇县| 凌云县| 普洱| 亳州市| 靖西县| 沙雅县| 五台县| 高唐县| 高要市| 乌什县| 延边| 康平县| 平阳县|