專案記錄 凸包修正

2021-08-01 01:28:43 字數 782 閱讀 8739

圓的凸包修正思路:

依據圓形邊界上各點的座標容易算出圓的外圍矩形的左上角頂點o的座標(lx, ly)

以o點為原點,重新給所有點進行排序,排序的規則如下:

oa方向越靠近垂直方向,則排序越靠前;

如果oa和ob在一條直線上,則比較|oa|和|ob|的大小,如果|oa|小,a距離o點更近,則a排序靠前。

(更理論的說法是依據極座標系下的座標值進行排序,具體如下:以o點為原點,建立極座標系,對圓上每個點,依據直角座標系中的座標值推算出極座標系下的座標。如果a點在極座標系下的角度值更大,或者角度值相等情況下半徑值更小,則a點排序靠前。)

具體實現時,比較半徑的方法就是計算兩點的距離,至於比較角度,下面需要詳細說明:

兩個點之間的角度比較方法是做叉積,oa×ob=|oa|*|ob|*sin(oa到ob的夾角)。從公式容易看出,如果oa×ob叉積結果為負數,表示oa到ob的夾角超過了180度,對應到圖中的情況只可能是a在極座標系下的角度值大於了b的角度值。

排完序之後,需要計算相鄰點的凸包性,方法也是使用上面的叉積,每判斷乙個點c時,和最近確定了的兩個點a,b進行進行計算,如果cb×ca為非正數,則表示a,b,c為凹形,c點需要剔除掉。

這樣遍歷之後餘下的就是符合凸形的樣本點了,依據這些樣本點繼續做插值可以得到近似的圓形了。

love2d教程19 揹包修正

之前寫過一篇揹包的文章,不過有很多功能沒完善,後來又修改了一下,效果如上圖 下面我說一下思路 首先模仿loveframe建立乙個自定義類,selectbox選擇框,可以移動並返回每次停留的id,以及選中的id,交換的id。再建立乙個equip裝備類,裝備類儲存裝備的名稱 描述 屬性。最後建立乙個包圍...

love2d教程19 揹包修正

之前寫過一篇揹包的文章,不過有很多功能沒完善,後來又修改了一下,效果如上圖 下面我說一下思路 首先模仿loveframe建立乙個自定義類,selectbox選擇框,可以移動並返回每次停留的id,以及選中的id,交換的id。再建立乙個equip裝備類,裝備類儲存裝備的名稱 描述 屬性。最後建立乙個包圍...

專案記錄 圓形邊緣修正方法探索1

問題 目前分割得到的圓形邊緣和理想邊緣相比,部分向外偏離,需要向內收縮 探索方法1 假設在理想情況下,圓形物體的掩膜是絕對正確的。此時可以遍歷當前的邊緣點,判斷每個邊緣點的兩側的掩膜標記是否不同。如果兩側的鄰域點掩膜都為0,說明該邊緣點偏外,需要向內收縮,使用最近的掩膜點來替換掉越界了的點。但是此方...