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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

线段树辅助——扫描线法计算矩形面积并

發(fā)布時間:2024/3/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 线段树辅助——扫描线法计算矩形面积并 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

線段樹輔助——掃描線法計算矩形面積并

本篇文章轉(zhuǎn)自:傳送門

分析:

1.矩形比較多,坐標也很大,所以橫坐標需要離散化(縱坐標不需要),熟悉離散化后這個步驟不難,所以這里不詳細講解了,不明白的還請百度

2.重點:掃描線法:假想有一條掃描線,從左往右(從右往左),或者從下往上(從上往下)掃描過整個多邊形(或者說畸形。。多個矩形疊加后的那個圖形)。如果是豎直方向上掃描,則是離散化橫坐標,如果是水平方向上掃描,則是離散化縱坐標。下面的分析都是離散化橫坐標的,并且從下往上掃描的。

? ?掃描之前還需要做一個工作,就是保存好所有矩形的上下邊,并且按照它們所處的高度進行排序,另外如果是上邊我們給他一個值-1,下邊給他一個值1,我們用一個結(jié)構(gòu)體來保存所有的上下邊?

struct segment
{
double l,r,h; ? //l,r表示這條上下邊的左右坐標,h是這條邊所處的高度
int f; ? //所賦的值,1或-1
}

接著掃描線從下往上掃描,每遇到一條上下邊就停下來,將這條線段投影到總區(qū)間上(總區(qū)間就是整個多邊形橫跨的長度),這個投影對應(yīng)的其實是個插入和刪除線段操作。還記得給他們賦的值1或-1嗎,下邊是1,掃描到下邊的話相當于往總區(qū)間插入一條線段,上邊-1,掃描到上邊相當于在總區(qū)間刪除一條線段(如果說插入刪除比較抽象,那么就直白說,掃描到下邊,投影到總區(qū)間,對應(yīng)的那一段的值都要增1,掃描到上邊對應(yīng)的那一段的值都要減1,如果總區(qū)間某一段的值為0,說明其實沒有線段覆蓋到它,為正數(shù)則有,那會不會為負數(shù)呢?是不可能的,可以自己思考一下)。

每掃描到一條上下邊后并投影到總區(qū)間后,就判斷總區(qū)間現(xiàn)在被覆蓋的總長度,然后用下一條邊的高度減去當前這條邊的高度,乘上總區(qū)間被覆蓋的長度,就能得到一塊面積,并依此做下去,就能得到最后的面積

(這個過程其實一點都不難,只是看文字較難體會,建議紙上畫圖,一畫即可明白,下面獻上一圖希望有幫組)

總結(jié)

以上是生活随笔為你收集整理的线段树辅助——扫描线法计算矩形面积并的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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