作者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/cn.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