作者mantour (朱子)
看板Math
標題Re: [幾何] blending surfaces的問題
時間Wed Oct 30 18:00:46 2024
※ 引述《phoenixlife (All in AAPL)》之銘言:
: 最近看到電腦圖學的數學
: 是有關把兩個曲面可以融在一起
: 方法叫smooth minimum
: 看到一位作者Inigo Quilez 是採用quadratic polynomial
: 開了desmos測試一下
: https://www.desmos.com/3d/s1nmvi8frp?lang=zh-TW
: 但數學式子有個地方看不懂
: https://i.imgur.com/yx3GGPZ.jpeg
: 就是為什麼要除以4,而且我只要改成其他數字,邊界就會出問題
設S1: f1(x,y,z)=0 , S2: f2(x,y,z)=0
f3(x,y,z) = min(f1,f2) - max(0, k-|f1-f2|)^2/ak, k>0
我們觀察一下f3在不同範圍的樣子
1. 在 |f1-f2|>k 的區域
f3 = min(f1,f2) , 所以S3: f3(x,y,z)=0 在S1, S2 分得夠遠的地方就是兩個曲面的聯
集, 符合我們想要的性質
2. 在 |f1-f2|<k 的區域
f3 = min(f1,f2) - (k-|f1-f2|)^2/ak
若 f1>f2
f3 = f2 - (k-f1+f2)^2/ak
▽f3 = ▽f2 + 2(k-f1+f2)/(ak) ▽f1 - 2(k-f1+f2)/(ak) ▽f2
在f1-f2 ->0 時
▽f3 -> 2/a ▽f1 + (1 - 2/a) ▽f2
反之 當f2>f1
在f1-f2 ->0 時
▽f3 -> (1 - 2/a) ▽f1 + 2/a ▽f2
因為 ▽f3 是曲面的法向量
如果我們希望曲面是平滑的
那 ▽f3 在跨過 f1-f2 = 0 的曲面兩邊要連續因此邊界條件為:
(1-2/a) = 2/a => a = 4
cubic的情形類似計算可得 a=6
: cubic polynomial 則是要除以6,不然邊界會出問題
: https://i.imgur.com/5BszvZO.jpeg
: 大概只知道他是要把兩個曲面sdf的差要做標準化,然後再丟進多項式
: 希望版上大大可以解惑
: 另外如果有不錯的電腦圖學、幾何代數相關的書可以推薦給我,原文也可以
: 謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.165.22.208 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Math/M.1730282448.A.FB4.html
※ 編輯: mantour (118.165.22.208 臺灣), 10/30/2024 19:02:40
1F:→ musicbox810 : 請問m大(1-2/a) = 2/a要怎麼推得? 10/30 20:29
2F:→ musicbox810 : 懂了 10/30 20:33
3F:推 phoenixlife : 看懂了 感謝! 10/30 21:53
4F:→ musicbox810 : 雖然是看懂裡面的過程,可是還是不知道f3的意思 10/31 00:48
5F:→ mantour : 我的f3就是原本連結裡面的m 10/31 10:11
6F:→ mantour : f3=m(f1,f2,k)=0 就是f1,f2融合的曲面 10/31 10:12
7F:→ mantour : 這裡的f3就是 m(f1,f2,k) 10/31 10:13
8F:→ mantour : 如果要融合三個曲面可以先融合前兩個, 得到的結果再 10/31 10:15
9F:→ mantour : 跟第三個融合 10/31 10:15
10F:→ musicbox810 : 謝謝m大的解釋 10/31 23:07
11F:→ musicbox810 : m大可以解釋一下f3的實際意義嗎? 10/31 23:07
12F:→ mantour : musicbox那請問你min(f1,f2)的部分也有問題嗎, 還是 11/01 18:37
13F:→ mantour : 只有後面有k的那部分有問題? 11/01 18:37
14F:→ musicbox810 : 都有問題,如果是min(a(x,y),b(x,y))可理解是兩曲面 11/01 23:10
15F:→ musicbox810 : 間垂直高度差,可是當a(x,y,z),b(x,y,z)就不知道怎 11/01 23:11
16F:→ musicbox810 : 麼解釋 11/01 23:11
17F:→ mantour : 就是兩個三維空間中的純量場的差啊 11/02 01:27
18F:→ mantour : 例如f1,f2分別代表是兩個不同重力場的位能好了,那 11/02 01:35
19F:→ mantour : min(f1,f2)這個場的等位面,就是f1等位面的一部分 11/02 01:35
20F:→ mantour : 跟f2等位面的一部分接起來,只是接的部分不平滑 11/02 01:35
21F:→ mantour : f1-f2=0是空間中的一個曲面,這個曲面會包含f1=0和 11/02 01:37
22F:→ mantour : f2=0這兩個曲面的交點 11/02 01:37
23F:→ mantour : |f1-f2|<k就是這個曲面往兩邊增加厚度k的一個厚度2 11/02 01:41
24F:→ mantour : k的殼 11/02 01:41
25F:→ mantour : f3在殼的一邊等於f1,另一邊等於f2,然後殼中間的 11/02 01:42
26F:→ mantour : 部分用一個平滑的函數把它連起來 11/02 01:42
27F:→ mantour : 對不起更正厚度的部分,厚度不是2k 11/02 01:55
28F:→ mantour : 大約是k除以f1-f2在垂直f1-f2=0的方向上的梯度,不 11/02 01:58
29F:→ mantour : 過這個厚度實際是多少也無關緊要,就是某個厚度 11/02 01:58
30F:→ musicbox810 : 那請問m大為什麼要用min(a,b)去減後面那一項?而且怎 11/02 08:15
31F:→ musicbox810 : 怎麼確定min(a,b)的地方就一定是a和b最接近的地方? 11/02 08:15
32F:→ musicbox810 : 我的意思是a和b最小的地方跟實際上圖形最接近的地方 11/02 08:17
33F:→ musicbox810 : 一定有相關聯嗎?是否a、b必須有額外的性質? 11/02 08:18
34F:→ musicbox810 : 重力位能有相同基準,但是兩顆球的方程式有各自起點 11/02 09:11
35F:→ musicbox810 : 就算a=b,也不代表a面和b面相接觸吧? 11/02 09:13
36F:→ musicbox810 : 我應該是也不懂為什麼會需要有min(a,b)來做黏合 11/02 09:23
37F:→ musicbox810 : 重力位能有相同基準面,所以a-b可以有距離的解讀 11/02 09:25
38F:→ musicbox810 : 任意a, b,兩函數相減的意義,我就看不太出來 11/02 09:25
39F:→ musicbox810 : 還有m(a,b)設為=0的意義我也不了解。抱歉這麼多問題 11/02 09:29
40F:→ musicbox810 : 麻煩m大了 11/02 09:30
41F:→ mantour : 沒錯啊,這裡預設原本兩個曲面的方程式分別是f1=0 11/02 11:05
42F:→ mantour : 跟f2=0,如果不是m就要改一下 11/02 11:05
43F:→ mantour : 兩個曲面相交的曲線的方程式是f1=f2=0,一定會包含 11/02 11:06
44F:→ mantour : 於f1=f2這個曲面上 11/02 11:06
45F:→ mantour : f1(x,y,z),f2(x,y,z)只是一個三維的純量場,f1(x, 11/02 11:09
46F:→ mantour : y,z)=0和f2(x,y,z)=0才是要融合的曲面 11/02 11:09
47F:→ mantour : 融合後的曲面是 m(f1,f2,k)=0 11/02 11:15
48F:→ mantour : 所以你說二維f1(x,y),f2(x,y)講得也怪怪,此時要 11/02 11:18
49F:→ mantour : 融合的是f1(x,y)=0跟f2(x,y)=0這兩條曲線,而不是z 11/02 11:18
50F:→ mantour : =f1(x,y) 跟z=f2(x,y)這兩個曲面 11/02 11:18
51F:→ musicbox810 : 如果a,b標量場沒有長度或距離的意義,|a-b|有什麼樣 11/02 16:49
52F:→ musicbox810 : 的意義?搞不好a=0,b=0差得很遠,但是|a-b|可以很大 11/02 16:49
53F:→ musicbox810 : 或很小 11/02 16:49
54F:→ musicbox810 : 以原PO的desmos內容f1=0和f2=0都沒有相交,就算f1=0 11/02 16:54
55F:→ musicbox810 : 和f2=0在某曲線上相交,這與|a-b|多大多小好像也沒 11/02 16:54
56F:→ musicbox810 : 有一定要是大還是小,a,b的大小取決於a,b自己的函數 11/02 16:55
57F:→ musicbox810 : 不知道我哪個地方想法有誤? 11/02 17:00
58F:→ mantour : 如果f1=0跟f2=0本來沒相交, 那k夠小的時候 11/03 17:21
59F:→ mantour : f3就等於min(f1,f2) 11/03 17:23
60F:→ mantour : min(f1,f2)=0 要等於f1=0和f2=0的聯集應該有一定的 11/03 17:25
61F:→ mantour : 條件不是任意的f1,f2都成立 11/03 17:25
62F:→ mantour : 假如F1=-f1, F2=-f2, 那F3就要取max(F1,F2)+ 11/03 17:30
63F:→ mantour : min(0,|a-b|-k)^2/4k 才會有一樣的效果 11/03 17:30
65F:→ mantour : 所以我想這邊應該沒辦法很一般性的去解釋它 11/03 17:32
66F:→ mantour : 至少我沒有想到很好的規則 11/03 17:32
67F:→ mantour : 不過你說的|a-b|我是這樣想的 11/03 17:46
68F:→ mantour : 把 k 想成一個 tolerance value 11/03 17:47
69F:→ mantour : a-b = L 是一個曲面族 11/03 17:51
70F:→ mantour : ΔL 可以視為是曲面族中的兩個曲面之間的一種"距離" 11/03 17:52
71F:→ mantour : 在局部上有ΔS = |ΔL|/|▽(a-b)| 的關係 11/03 17:55
72F:→ mantour : 我可能再想清楚一點直接回一篇 11/03 18:48
75F:→ phoenixlife : 用2D去看或許比較直觀 11/03 21:54
76F:→ phoenixlife : 球面只要過綠線就會開始變形做平滑 11/03 22:00
77F:→ phoenixlife : 當 (f1-f2)/k=1 時,會是右綠線 11/03 22:25
78F:→ phoenixlife : 當 (f1-f2)/k=-1 時,會是左綠線 11/03 22:25