1. 程式人生 > >c#實現 改進弧長法判斷點在多邊形裡面

c#實現 改進弧長法判斷點在多邊形裡面

一、開發環境:

    VS2017,C# winform視窗程式

二、不同點

     和網上的介紹不同,我也 不清楚是為什麼,我去實現別的部落格的思路,始終是在象限相差為2的地方會判斷不正確,所以我自己思考了一種方法來進行這個地方的處理。

三、演算法思路解釋

1、為了介紹方便,先規定符號:

   將需要判斷的點叫做:centerPoint

   多邊形的頂點序列是:points[n]

   第i個點為:points[i]

   points[n]對centerPoint的相對位置,也就是將座標原點放在centerPoints後,每個points[i]的位置變為relativePoints[i]

   同時最後一個點和第一個點相同:即points[n]=points[0]

1、介紹:

   1)、我們知道圓的弧長都是2\pi,如果centerPoints在一個多邊形裡面,那麼將多邊形按頂點順序對映到centerPoint的弧長必定等於2\pi,如果centerPoint在多邊形的外面,那麼中心投影的弧長為0。(當然,這個弧長是規定了方向的,方向相反會抵消投影的弧長)

  2)、於是就這樣進行程式設計:

        從relativePoints[0]出發,

        當relativePoints[i+1]比relativePoints[i]象限增加1的時候,弧長加上\pi/2

        當relativePoints[i+1]比relativePoints[i]象限減少1的時候,弧長減去\pi/2

        當relativePoints[i+1]比relativePoints[i]象限增加2或則減少2的時候,弧長增加或者減少\pi,如何增減,第三部分細講;

   3)當所有頂點都遍歷完之後,如果總的弧長=2\pi或者-2\pi,說明centerPoint在多邊形裡面,總的弧長=0,說明centerPoint在多邊形外面。

三、在relativePoints[i+1]比relativePoints[i]的象限相差2詳解