導航:首頁 > 源碼編譯 > 洞的演算法介紹

洞的演算法介紹

發布時間:2023-02-05 07:18:16

⑴ 窗簾布的上面有洞的演算法

一樣的,按寬度2倍算就好,只要打孔時算好就可以,一般每個洞距離15~20CM之間。

⑵ 黑洞質量的計算方法

根據史瓦西半徑,可計算出一個天體要維持形態的最小半徑,根據黑洞的半徑可反推算其質量,Rs=2Gm/c^2

推導過程:

由 F=GmM/r^2

得知 r 越小 則F越大

而引力F 正比於 物體吸引落下速度V

且速度V最大值為c

求星體半徑臨界直(V=c之 r 臨界直) ; 即史瓦西半徑

由 F=ma=mg 得 GMm/r^2 = mg 故 g = GM/r^2 由固定重力場位能得非固定重力場位能公式

a. 將 E=mgh 代換成 E=GMmh/r^2 且 h=r 故 E=GMm/r 表位能

b.列受星體吸引物質之速度與位能對應式 求得臨界半徑r(史瓦西半徑)

1/2 mv^2 = GMm/r

做 洛倫茲 變換

1/2 mv^2/√(1-v^2/c^2)= GMm/r√(1-v^2/c^2)

得到r = 2GM/V^2

當v=c 求r之臨界直

則全式可得

Rs = 2GM/c^2 ;

Rs為史瓦西半徑 ;

左為史瓦西半徑公式

(G為引力常數 M為恆星質量 c為光速)
如果僅從史瓦西半徑
看,所有半徑尺度和質量大小的黑洞的存在都是可能的

⑶ 寫出基於洞的分片重組演算法的步驟!

片偏移欄位以「8位元組」為單位,即偏移值如果是1的話,表示偏移量為8個位元組!

這樣算來,正好和IP包最大長度65535相符!

⑷ <<Polygon Mesh Processing>>閱讀筆記(8) 模型修復(Repair)

所謂模型修復,就是取「矯正」模型的一些「畸形」的地方(Artifacts)。

一些比較常見的「畸形」的情景有:

一般我們將模型修復演算法粗略的分為下面兩類:

這類演算法通常直接對輸入的數據進行操作並通過修改曲面直接將「畸形」的地方(Artifacts)「矯正」。

如果是「溝(Gap)」,我們可以通過調整邊界處的頂點和邊的位置將兩條邊界邊界「縫合」起來。

如果是「洞(Hole)」,我們將空白的部分進行三角剖分,從而補上它。

如果是「相交(Intersection)」,我們可以將相交出的三角形和邊拆分(Split)。

演算法只會額外添加很少的三角形。且不會修改其它正常區域。與此同時還能夠較好地保留和頂點、三角形相關聯的屬性(連接性、紋理等)。

為了保證有效的輸出,該演算法對輸入的模型會有一定的要求,故在執行演算法之前和之後還需要我們進行一些手動處理。此外,由於存在精度上的問題,諸如 相交(Intersection) 大范圍重疊(Large Overlap) 之類的地方不能被很好地修復,其它的例如在兩個非常接近的曲面間產生的 溝(Gap) 往往不能夠被檢測到。

該演算法將輸入的模型用測定體積的方式去表示它(簡單地說就是該模型占據了空間的哪些區域)。然後根據前面的表示形式,從中提取輸出的模型。

所謂測定體積的方式,即將空間劃分為一小塊一小塊,對於每一個小塊我們賦予其下面三種狀態之一的狀體:模型內、模型外和與模型相交。

常見的方法有:根據笛卡爾坐標進行劃分、自適應八叉樹、KD樹、BSP樹和3D德洛內三角剖分。

該演算法不需要手動進行處理,且輸出的模型是完全嚴絲合縫的(Watertight Model),能夠修復除了 Handle 外的其它類型的「畸形」。不過這種類型的「畸形」也可以通過一定方法移除掉。

從整體上看,演算法相當於是對輸入的模型進行了一次重采樣,因而會造成諸如走樣(Alias)、丟失模型特徵的問題,並且模型上基於原有網格連接性的相關屬性信息也會丟失。因為輸出模型的三角形的數目會比輸入模型的要多,所以還需要對輸出的模型進行簡化。並且演算法是比較耗費內存的,所以往往很難再高解析度的模型上運行。

下面介紹一些常用的模型輸入類型以及該類型通常會產生的「畸形」的類型。

Registered Range Scan是一系列相互重疊的面片,這些面片可以用來表示輸入模型。在將這些面片融合為一個單一的三角形網格的時候就由可能出現問題。由於輸入數據中存在較大的重疊,所以曲面上的某一個點 x 會被若干個面片表示。並且每一個面片都有自己的連接性屬性,這些屬性和其它的面片並不兼容。

Fused Range Scan是帶邊界(如Gap、Hole和Island)的流形(Manifold)網格。這些邊界是由於掃描儀的實現上出現了遮擋物或者物體表面上的一些特殊屬性,如透明或者高光造成的。我們的目標是找到並填補上這些洞(Hole)。更加高級的演算法不僅僅是填上這些洞(Hole),而且還根據該區域周圍的幾何特徵為這個區域合成新的幾何特徵。

Triangle Soup是三角形的集合,並且幾乎沒有這些三角形的連接性信息。Triangle Soup通常出現在CAD建模中,由用戶手動建立(通過一些已經定義好的元素來創建出目標模型的邊界)。模型雖然只是由三角形構成,卻可能出現各種類型的「畸形」。其中「相交(Intersection)」是最為常見的,對其的檢測過程非常耗時。所以該類型通常多用於可視化而不是幾何處理。

Triangulated NURBS Patch是一系列三角形網格的集合,最終的模型由這些網格拼接得到。所以在將不同的網格拼合的時候,拼合處就可能會出現「溝(Gap)」和小的「重疊(Overlap)」。並且在結合處還有可能出現法線方向不一致的情況。通常我們使用 Surface-Oriented Algorithm 來修復它。首先要確保輸出的每一塊網格的朝向一直,然後在將相鄰兩塊網格咬合(Snap)在一起。

Contoured Mesh是通過體積測定數據集(Volumetric Dataset)導出的網格模型。理論上導出的模型是一個流形(Manifold),並且是密閉的(Watertight)。然而也會出現像下圖那樣的「畸形」(書中稱之為 Small Spurious Handle )。

體積測定數據(Volumetric Data)通常出現在構造實體幾何(Constructive Solid Geometry)中,或者在醫學圖像(CT,核磁共振等)中用作某種中間表示形式。在數據集中的每一個點通常會被賦於一個標量值,負值代表在物體內部,正值代表在物體外部,零值則代表在物體表面上,這些點通常也被稱為 體像素(Voxel)

由於解析度有限,體像素通常不能夠被正確的分類(內部、外部還是表面上),導致 Partial Volume Effect ,簡單的說就是因為顯示粒度相對於數據集中的點來說太大或者太小了導致無法對其進行正常的分類。舉個例子,我們知道大腦皮層與球面同胚(能夠展開為球面),但是在我們通過CT掃描的數據導出的模型中一些實際上是分離的地方往往都糊成了一團。

對於 Handle 類的「畸形」,我們往往是在原數據集進行處理以修復它,然後在提取出結果模型。然後在對模型進行處理以修復其它的「畸形」。

Badly Meshed Manifold是指包含了退化元素(Degenerate Element)的網格,如:

改善這類網格的方法一般是 網格重劃分(Remeshing)

Surface-Oriented Algorithm直接對輸入的網格進行修改,以對其進行顯示修復。

這里介紹的補洞演算法是其它類似演算法的基礎。我們的目標是得到一個三角形網格,網格的邊界是一個給定的多邊形 p 0,..., p n-1,該多邊形能夠正好放入待修復的「洞(Hole)」中。隨後我們還需根據一些與網格屬性(如面積,三角形法線的變化程度,曲率分布等)相關的質量函數去優化這塊網格。

假設φ( i , j , k )是定義在三角形( p i, p j, p k)上質量函數, ω (i,j)是多邊形 p 0,..., p n-1的子多邊形 p i,..., p j經過三角剖分後得到網格的最優質量, ω (i,j)可以通過下面的迭代式遞歸的計算出來

其中整體的最優質量 ω (0,n-1)能夠通過動態規劃演算法計算得到。

函數φ( i , j , k )應該考慮下面兩個因素:

並且第一個因素的決定程度更高,所以

可以發現,我們在評估一個三角形的質量的時候考慮到了其周圍的三角形。這些三角形可能是原來已經有的,也可能是新創建出來。

在填補完成後,我們還需要對填補上去的網格進行一些調整,使得其頂點分布的密度以及邊的平均長度於其周圍的網格相匹配。

演算法構建三角剖分的時間復雜度為O(n³),由於「洞(Hole)」一般不大,所以這是可以接受的。然而演算法並不能「矯正」「自我相交(Self Intersection)」的問題。

對於「溝(Gap)」,我們可以將其看成一個特殊的「洞(Hole)」,使用上面介紹演算法來進行修復。

另外可以做從點到邊的收縮(Vertex-Edge Contraction)操作。假定我們將頂點 v 收縮指邊界 e 上,設 c e 上離 v 最近的點,如果 c e 內部的頂點,則將 c 插入到 e 上,並將相鄰的那個三角形一分為二。最後再將 v c 合並即可。可以使用 v c 的距離來作為收縮操作的誤差。演算法還維護著一個優先隊列,優先隊列存儲的是一對頂點和邊,優先順序使用的是前面提到的誤差。然後按優先順序從小到大進行相應的收縮操作。

上述演算法本身是完備的,且易於實現。如果輸入的模型和設定的閾值比較理想,一般能夠得到比較理想的結果。不過往往實際情況並非這么理想,由於演算法本身是啟發式的,所以輸出的模型上可能還是會存在各種「畸形」的地方(Artifacts)。所以演算法往往被設定為迭代循環的形式,讓用戶來引導,使演算法向著期望的地方進行迭代。

拓撲簡化的目的就是為了移除網格上的 Handle ,演算法的基本思想如下圖所示:首先將 Handle 沿著綠線切開,切開後模型上會出現兩個「洞(Hole)」,然後使用之前提到的演算法將這兩個「洞(Hole)」給補上。

給定一個初始三角形 s ,演算法通過對原網格執行Dijkstra演算法計算得到 s 周圍的Geodesic Region R ε( s )。Dijkstra演算法在計算得到最短路徑的同時,還能得到每一個三角形到初始三角形 s 的最短路徑上的上一個三角形(Parent Triangle),記作 p ( t ), p ( t )的上一個三角形記作 p ²( t )...依此類推,路徑上的最後一個點為 s

R ε( s )包含一個或多個環狀邊界,當有一個環狀邊界在某一條邊上觸碰到自己的時候,就將它分裂為兩個新環。如果是兩個不同的環在 e 12處相互觸碰的時候就表示我們檢測到了 Handle 。假設 t 1和 t 2是與 e 12相鄰的兩個三角形,假設 t 1和 t 2存在一個共同的祖先

則該 Handle 可以由下面的閉合路徑確定

然後我們沿著該路徑將模型切開,並補上新產生的兩個「洞(Hole)」。

為了檢測原網格中的所有 Handle ,我們必須對所有的三角形 s 執行上面的演算法,所以演算法的效率不高。並且演算法不能檢測到長的(long)、薄的(thin) Handle ,並且不能保證在 Handle 被移除後不存在幾何自相交的情況。

這種方法能夠修復包含有 Gap Overlap 以及 Intersections 的模型,對於 Hole Handle ,該方法使用形態學操作(Morphological Operators)來對其進行處理。

演算法分為兩步,第一步是進行體素化。首先生成 投影方向集合 { d i}(如通過細分八面體或者二十面體)。接下來將模型沿著正交平面網格(Orthogonal Planar Grid)的方向進行投影。對於網格上的每一個點 x ,演算法會記錄射線 x d i與輸入模型的第一個和最後一個交點。位於兩者之間體像素(voxel)被分類是處於內部點,其它的體像素(voxel)被分類為外部。每一個體像素會被不同的射線進行分類,最終的分類結果按照少數服從多數的原則選取。

第二個步驟是可選的,通過形態學操作(Morphological Operators)將 Handle Hole 進行修復。這個過程會用到 膨脹(Dilation) 腐蝕(Erosion) 操作。對於膨脹操作,考慮被分類為內部的頂點組成的集合,將所有與該集合距離小於特定值的外部體像素的分類設置為內部。而腐蝕操作則與膨脹操作正好相反。

該演算法是啟發性的,通常不是非常的可靠,並且不是特徵敏感(Feature sensitive)的,即某些特徵可能在修復後丟失。

可以使用八叉樹代替規則網格以改進上述演算法。在改進的演算法中會使用下面兩個限制變數:容忍度ε和最大修復直徑 ρ(描述需要修復多寬的Gap)。

首先使用八叉樹對輸入的模型進行劃分,ε在這里表示節點的最小直徑。接下來對八叉樹子節點進行分類(處於內部還是外部)。然後對處於模型邊界上的節點進行 膨脹(Dilation) 操作,膨脹的距離為 n = ρ / ε,這樣直徑小於ρ的Gap將會被修復。下一步,從外部向內部進行 膨脹(Dilation) 操作,以抵消前一步帶來的模型體積的增大。

接下來使用Dual Contouring演算法通過采樣點進行重建工作即可。采樣點通常取與三角形所在平面的平方距離最小值的點(模型簡化那一章提到過),如果找不到這樣的平面(節點是通過膨脹操作得到的),則可以通過平滑運算元(Smoothing Operator)來采樣得到采樣點。

改進演算法能夠保證輸出是一個流形(Manifold),並且特徵能夠得到保留,但是重建的解析度是有限的。

該演算法使用BSP樹,每一個輸入多邊形(三角形)所在的平面作為其劃分平面,樹的子節點對應了一個凸多邊形Ci。對於每一個凸多邊形Ci,定義並計算出一個從-1到1的 硬度系數(Solidity Coefficient) s i。-1表示區域為空(不屬於網格內部),1表示則表示其屬於區域內部。

所有無限大的區域都可以被看作是處於物體的外部,因此其 硬度系數(Solidity Coefficient) 的值為-1。

設Ci為有限區域, N (i)表示於其相鄰的面的集合。那麼對於 j N (i),交集Pij = Ci ∩ Cj表示兩區域相交部分多邊形所在的平面, t ij表示區域邊界平面上不被輸入多邊形(三角形)包含的部分的面積(稱之為透明的), o ij表示區域邊界平面上被輸入多邊形(三角形)包含的部分的面積(稱之為不透明的), a ij表示平面的總面積。那麼 s i與和其相鄰的 s j的關系可以寫成

其中 A i表示區域Ci邊界的面積之和

通過觀察可以發現如果兩個區域相交平面大部分為透明的,則有很大的可能它們都是處於內部或者都是處於外部的。如果大部分區域為不透明的,則有很大可能其中一方處於內部而另一方處於外部。

上面的式子可以寫成下面的矩陣的形式

最終通過枚舉所有的區域Ci,如果其中一方是處於內部的而另一方是處於外部的,則將其邊界Pij加入到重建的過程中。

該演算法不需要用戶指定一些額外的參數,並且可以得到嚴絲合縫的模型(Watertight Model)。得到的結果中可能包含有 Complex Edge Singular Vertex (參考開篇的圖片),這些可以使用前面提到的方法進行修復。不過,很難找到即具有魯棒性又具有高效性的的BSP結構。

該演算法首先使用坐標系網格所有面的一個子集 F 來近似輸入模型,為了節約內存,可以使用八叉樹來輔助這個過程。同時將采樣點(和法向量)附在每一個面上,以方便後面進行一些更精確的操作。

對於子集 F ,其邊界∂ F 可以定義為指向奇數個面的坐標系網格邊的集合(如下圖中紅色圓點)。

對於每一個邊界上的迴路Bi,接下來我們尋找另一個集合 G ,集合 G 與Bi相同,且它們的對稱差集的邊界為空集。然後將 F 進行替換,直到 F 的邊界為空集。

最後只需要使用Marching Cubes或者Dual Contouring演算法進行最後的重建工作即可。

該演算法能夠保證輸出是一個流形(Manifold),並且演算法的內存效率較高能夠適應較大的數據量。但是在一些特殊結構,如待修復的 Hole 與輸入的幾何機構存在重合的時候,網格可能會變成幾個不相連的部分。

⑸ 像UG,Autocad之類的三維建模軟體在修補一個曲面上的孔、洞時用的是什麼樣的演算法,是什麼原理

用的是布爾運算,你自己可以去網路下看看。

⑹ 洞穴探寶問題(用C++知識)

0分!好吝嗇啊。。。

⑺ 關於斜交涵洞的計算方法有哪些

剛學做涵洞,斜交斜做,與路線斜角110度,涵洞裝模是與涵洞垂直,斜角110度,如果與路線平行線計算標高,一邊高一邊低,這樣算有橫坡也有縱坡,感覺很不對,經理說是這樣的沒事。我不知道圖紙上給的標高是涵洞中軸線標高還是平行路線一條上的標高,請高手指指導。

⑻ 那個差點計算方式最公平具體演算法是什麼

一、根據球員提交的平日打球成績計算差點指數
1
、計算每張記分卡成績的差點微分=(調整後的總桿
-
USGA
球場
難度值

*113÷USGA
球場坡度難度值
例:
總桿-球場難度系數:
95

71.5

23.5
差值
×
標准
坡度系數

23.5×113

2655.5
乘積
÷
球場坡度系數:
2655.5÷125

21.244
保留一位小數得出成績的差點微分:
21.2
2
、計算差點指數

i
)按照下表選擇用於計算差點指數的記分卡
會員記分卡總數
選用的記分卡數(按照差點微分)
5
or
6
最低的
1

7
or
8
最低的
2

9
or
10
最低的
3

11
or
12
最低的
4

13
or
14
最低的
5

15
or
16
最低的
6

17
最低的
7

18
最低的
8

19
最低的
9

20

更多
最低的
10


ii
)累計差點微分之和;

iii
)求差點微分之平均值;

iv
)用平均值
乘以
0.96


v
)保留一位小數。
不知道你說的是否是這種·

⑼ 數字黑洞演算法用迭代公式是什麼

數字黑洞演算法用迭代公式:xi(t+1)=xi(t)+rand*(xrh-xi(t))。數字黑洞,又稱指的是某種運算,這種運算限定從某些整數出發,反復迭代後結果必然落入一個點或若干點的情況叫數字黑洞。黑洞原是天文學中的概念,表示這樣一種天體:引力場是如此之強,就連光也不能逃脫出來。黑洞數又稱陷阱數,類具有奇特轉換特性整數,任何數字不全相同的整數,經有限重排求差操作,總會得某或些數,這些數即黑洞數重排求差操作即把組成該數數字重排得大數減去重排得小數。

⑽ 洞子立方怎麼算

洞子立方演算法如下:
有上述可知:圓洞的底面面積S=π*(d/2)_=3.14x0.5_=0.785(平方米)。圓洞的體積V=SxH=0.785x3=2.355(立方米)。所以,1米的直徑,3米深的圓洞的體積為2.355(立方米)。

閱讀全文

與洞的演算法介紹相關的資料

熱點內容
北京通app怎麼注冊登錄 瀏覽:820
iphone上的數據怎麼轉移到安卓 瀏覽:743
python求每個時段平均值 瀏覽:244
安卓手機右上出現Hg什麼意思 瀏覽:69
程序員神經 瀏覽:753
dns伺服器在電腦上有什麼用 瀏覽:915
杭州大媽喜歡程序員 瀏覽:686
python評論樹講解 瀏覽:679
juniper防火牆常用命令 瀏覽:426
vapp怎麼下載地址 瀏覽:11
pdf裡面內容怎麼修改 瀏覽:807
收藏網址加密的瀏覽器 瀏覽:1000
phpurl問號 瀏覽:898
什麼筆記本電腦可以用python 瀏覽:135
加密相冊如何翻找 瀏覽:992
泰州地區DNS伺服器地址 瀏覽:849
一種app可以買菜用英語怎麼說 瀏覽:196
中國聯通app裡面通話詳單怎麼刪除 瀏覽:505
計算機網路編譯軟體 瀏覽:100
程序員說不能說的秘密 瀏覽:700