日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

c#实现 改进弧长法判断点在多边形里面

發(fā)布時(shí)間:2025/4/16 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#实现 改进弧长法判断点在多边形里面 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、開(kāi)發(fā)環(huán)境:

? ? VS2017,C# winform窗口程序

二、不同點(diǎn)

? ? ?和網(wǎng)上的介紹不同,我也 不清楚是為什么,我去實(shí)現(xiàn)別的博客的思路,始終是在象限相差為2的地方會(huì)判斷不正確,所以我自己思考了一種方法來(lái)進(jìn)行這個(gè)地方的處理。

三、算法思路解釋

1、為了介紹方便,先規(guī)定符號(hào):

? ?將需要判斷的點(diǎn)叫做:centerPoint

? ?多邊形的頂點(diǎn)序列是:points[n]

? ?第i個(gè)點(diǎn)為:points[i]

? ?points[n]對(duì)centerPoint的相對(duì)位置,也就是將坐標(biāo)原點(diǎn)放在centerPoints后,每個(gè)points[i]的位置變?yōu)閞elativePoints[i]

? ?同時(shí)最后一個(gè)點(diǎn)和第一個(gè)點(diǎn)相同:即points[n]=points[0]

2、介紹:

? ?1)、我們知道圓的弧長(zhǎng)都是,如果centerPoints在一個(gè)多邊形里面,那么將多邊形按頂點(diǎn)順序映射到centerPoint的弧長(zhǎng)必定等于,如果centerPoint在多邊形的外面,那么中心投影的弧長(zhǎng)為0。(當(dāng)然,這個(gè)弧長(zhǎng)是規(guī)定了方向的,方向相反會(huì)抵消投影的弧長(zhǎng))

? 2)、于是就這樣進(jìn)行編程:

? ? ? ? 從relativePoints[0]出發(fā),

? ? ? ? 當(dāng)relativePoints[i+1]比relativePoints[i]象限相同的時(shí)候,弧長(zhǎng)保持不變

? ? ? ? 當(dāng)relativePoints[i+1]比relativePoints[i]象限增加1的時(shí)候,弧長(zhǎng)加上

? ? ? ? 當(dāng)relativePoints[i+1]比relativePoints[i]象限減少1的時(shí)候,弧長(zhǎng)減去

? ? ? ? 當(dāng)relativePoints[i+1]比relativePoints[i]象限增加2或則減少2的時(shí)候,弧長(zhǎng)增加或者減少,如何增減,第三部分細(xì)講;

? ?3)當(dāng)所有頂點(diǎn)都遍歷完之后,如果總的弧長(zhǎng)=或者,說(shuō)明centerPoint在多邊形里面,總的弧長(zhǎng)=0,說(shuō)明centerPoint在多邊形外面。

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

? 1、思路:

? ? 對(duì)于p(x0,y0)判斷它在直線L:ax+by+c=0(a必須大于0)的左側(cè)還是右側(cè),我們知道如果

? ? ? ? ax0+by0+c>0(a>0),點(diǎn)p在直線L的右側(cè);

? ? ? ? ax0+by0+c=0? (a>0),點(diǎn)p在直線L上

? ? ? ? ax0+by0+c<0? (a>0),點(diǎn)p在直線L左側(cè)。

如下圖:

2、應(yīng)用:

? ? ??

? ? ? 分為以下四種情況,

? ? ? 1)當(dāng)relativePoints[i+1]=(x2,y2)在第一象限,relativePoints[i]=(x1,y1)在第三象限的時(shí)候:

? ? 那么直線為:? (y2-y1>0)

? ? 對(duì)于點(diǎn)屏幕上任意一點(diǎn)P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長(zhǎng)加上

? ? ?f=0:? ? ? ? ?P(x0,y0)在多邊形邊上

? ? ?f<0:? ? ? ? ?總弧長(zhǎng)減去

?

? ? ? 2)當(dāng)relativePoints[i+1]=(x2,y2)在第三象限,relativePoints[i]=(x1,y1)在第一象限的時(shí)候:

? ? 那么直線為:(y1-y2>0)

? ? 對(duì)于點(diǎn)屏幕上任意一點(diǎn)P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長(zhǎng)減去

? ? ?f=0:? ? ? ? ?P(x0,y0)在多邊形邊上

? ? ?f<0:? ? ? ? ?總弧長(zhǎng)加上

3)當(dāng)relativePoints[i+1]=(x2,y2)在第二象限,relativePoints[i]=(x1,y1)在第四象限的時(shí)候:

? ? 那么直線為:? (y2-y1>0)

? ? 對(duì)于點(diǎn)屏幕上任意一點(diǎn)P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長(zhǎng)減去

? ? ?f=0:? ? ? ? ?P(x0,y0)在多邊形邊上

? ? ?f<0:? ? ? ? ?總弧長(zhǎng)加上

? 4)當(dāng)relativePoints[i+1]=(x2,y2)在第四象限,relativePoints[i]=(x1,y1)在第二象限的時(shí)候:

? ? 那么直線為:(y1-y2>0)

? ? 對(duì)于點(diǎn)屏幕上任意一點(diǎn)P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長(zhǎng)加上

? ? ?f=0:? ? ? ? ?P(x0,y0)在多邊形邊上

? ? ?f<0:? ? ? ? ?總弧長(zhǎng)減去

?

等幾天再給出代碼

?

? ??

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結(jié)

以上是生活随笔為你收集整理的c#实现 改进弧长法判断点在多边形里面的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。