双三次样条曲面在GeoGebra中如何实现?
geogebra吧
全部回复
仅看楼主
level 11
如题,这是一个讨论问题,尽管网上给出了双三次样条曲面的复杂表达式,但可能是本人看不懂,一直没能够转化到GeoGebra中来,有哪位大神做过,不妨放上来学习一下。
本人如今只想到了替代办法,就是探讨由四条曲线决定的曲面问题,我们已经实现了三条曲线曲面问题,如何继续实现四条曲线的曲面,由于运算量太大,我们就在二维平面中讨论。
如下图,平面四条样条曲线a、b、h、d:
(直接略去点的坐标了)
l1 = {A, B, C, D, E}
a = 样条曲线(l1, 3)
l2 = {F, G, H, I, J}
b = 样条曲线(l2, 3)
l3 = {E, M, L, K, J}
d = 样条曲线(l3, 3)
l4 = {A, P, O, N, F}
h = 样条曲线(l4, 3)
由于在我的贴《平面曲面(网格)》中已经详细介绍了三条曲线形成的曲面网格,因此直接给出代码:
k = 10
e = 曲线((1 - u / k) E + u / k J, u, 0, k)
f = 曲面((1 - u / k) a(v / k) + u / k b(v / k) + d(u / k) - e(u), v, 0, k, u, 0, k)
这个网格曲面只能满足三条曲线,同样,我们对左边曲线作曲面:
g = 曲线((1 - u / k) A + u / k F, u, 0, k)
i = 曲面((1 - u / k) a(v / k) + u / k b(v / k) + h(u / k) - g(u), v, 0, k, u, 0, k)
它也只能满足三条曲线,这两个网格曲面如何叠加在一起,形成曲面i(绿色)到曲面f(红色)的过渡呢?
我们继续沿用过渡图形的作法,对曲面进行运算,由于这个运算量大,容易卡死,建议别在3D环境中试:
j = 曲面((1 - u / k) i(u, v) + u / k f(u, v), u, 0, k, v, 0, k)
这个表达式看似简单,实则是双重过渡运算,基本实现了四条曲线形成曲面的想法,但总觉得哪些地方可以简化,减少运算量,不然老是不能用于3D环境,意义就不太大,总不至于用这方法给封闭图形填色吧,太奢侈了。
2021年01月25日 03点01分 1
level 11
当然,这个曲面不是完全没有意义的,它的意义在于构建了一个任意变形的二维坐标系,同我们10*10直角坐标网格是一一对应关系,不管是图形的透视、变形、鱼眼放大都可以得用其实现,方法就是在10*10直角坐标网络中给出点坐标或者是图形的参数表达式(关于图形上点的坐标参数表达式),如平面上有一函数w(t),我们用曲线(J(w(t),t,0,k)就可以直接把图形放在曲面上变形。如有个圆放上去,变成如下鬼样子:
l = 曲线((4, 4) + (2cos(t), 2sin(t)), t, 0, 2π)
m = 曲线(j(l(t)), t, 0, 2π)
相当于日本国旗在风中飘扬的时候,我们看到的那个红日,它随曲面变化而变化。
2021年01月25日 04点01分 4
1