日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > C# >内容正文

C#

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

發布時間:2025/4/16 C# 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c#实现 改进弧长法判断点在多边形里面 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、開發環境:

? ? VS2017,C# winform窗口程序

二、不同點

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

三、算法思路解釋

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

? ?將需要判斷的點叫做:centerPoint

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

? ?第i個點為:points[i]

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

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

2、介紹:

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

? 2)、于是就這樣進行編程:

? ? ? ? 從relativePoints[0]出發,

? ? ? ? 當relativePoints[i+1]比relativePoints[i]象限相同的時候,弧長保持不變

? ? ? ? 當relativePoints[i+1]比relativePoints[i]象限增加1的時候,弧長加上

? ? ? ? 當relativePoints[i+1]比relativePoints[i]象限減少1的時候,弧長減去

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

? ?3)當所有頂點都遍歷完之后,如果總的弧長=或者,說明centerPoint在多邊形里面,總的弧長=0,說明centerPoint在多邊形外面。

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

? 1、思路:

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

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

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

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

如下圖:

2、應用:

? ? ??

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

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

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

? ? 對于點屏幕上任意一點P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長加上

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

? ? ?f<0:? ? ? ? ?總弧長減去

?

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

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

? ? 對于點屏幕上任意一點P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長減去

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

? ? ?f<0:? ? ? ? ?總弧長加上

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

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

? ? 對于點屏幕上任意一點P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長減去

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

? ? ?f<0:? ? ? ? ?總弧長加上

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

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

? ? 對于點屏幕上任意一點P(x0,y0):

? ? ?f>0:? ? ? ? 總弧長加上

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

? ? ?f<0:? ? ? ? ?總弧長減去

?

等幾天再給出代碼

?

? ??

?

?

?

?

?

?

?

?

?

?

?

?

?

?

?

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。