前面章节中讲了贝塞尔(Bézier)曲线,而贝塞尔曲面是对其多一个维度的扩展.其公式依然是曲线的公式:

而之所以由曲线变成曲面,是将顶点横向连了再纵向连.

很多计算机图形学的教程都会有贝塞尔曲面的DEMO.而这里,我依然是使用我制定的脚本代码生成贝塞尔曲面.代码中的控制顶点坐标为随机数生成,所以每次生成的曲面图形都不一样.

相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815

二次贝塞尔曲面:

需要生成3*3个控制顶点

vertices = D1: D2:

u = from  to  D1
v = from to D2 ax0 = rand2(-, )
ay0 = rand2(-, )
az0 = rand2(-, )
bx0 = rand2(-, )
by0 = rand2(-, )
bz0 = rand2(-, )
cx0 = rand2(-, )
cy0 = rand2(-, )
cz0 = rand2(-, ) ax1 = rand2(-, )
ay1 = rand2(-, )
az1 = rand2(-, )
bx1 = rand2(-, )
by1 = rand2(-, )
bz1 = rand2(-, )
cx1 = rand2(-, )
cy1 = rand2(-, )
cz1 = rand2(-, ) ax2 = rand2(-, )
ay2 = rand2(-, )
az2 = rand2(-, )
bx2 = rand2(-, )
by2 = rand2(-, )
bz2 = rand2(-, )
cx2 = rand2(-, )
cy2 = rand2(-, )
cz2 = rand2(-, ) ax3 = rand2(-, )
ay3 = rand2(-, )
az3 = rand2(-, )
bx3 = rand2(-, )
by3 = rand2(-, )
bz3 = rand2(-, )
cx3 = rand2(-, )
cy3 = rand2(-, )
cz3 = rand2(-, ) u1 = (-u)*(-u)
u2 = *(-u)*u
u3 = u*u ax = u1*ax0+u2*ax1+u3*ax2
ay = u1*ay0+u2*ay1+u3*ay2
az = u1*az0+u2*az1+u3*az2
bx = u1*bx0+u2*bx1+u3*bx2
by = u1*by0+u2*by1+u3*by2
bz = u1*bz0+u2*bz1+u3*bz2
cx = u1*cx0+u2*cx1+u3*cx2
cy = u1*cy0+u2*cy1+u3*cy2
cz = u1*cz0+u2*cz1+u3*cz2 v1 = (-v)*(-v)
v2 = *(-v)*v
v3 = v*v x = v1*ax+v2*bx+v3*cx
y = v1*ay+v2*by+v3*cy
z = v1*az+v2*bz+v3*cz u = u*
v = v*

三次贝塞尔曲面:

需要生成4*4个控制顶点

vertices = D1: D2:

u = from  to  D1
v = from to D2 ax0 = rand2(-, )
ay0 = rand2(-, )
az0 = rand2(-, )
bx0 = rand2(-, )
by0 = rand2(-, )
bz0 = rand2(-, )
cx0 = rand2(-, )
cy0 = rand2(-, )
cz0 = rand2(-, )
dx0 = rand2(-, )
dy0 = rand2(-, )
dz0 = rand2(-, ) ax1 = rand2(-, )
ay1 = rand2(-, )
az1 = rand2(-, )
bx1 = rand2(-, )
by1 = rand2(-, )
bz1 = rand2(-, )
cx1 = rand2(-, )
cy1 = rand2(-, )
cz1 = rand2(-, )
dx1 = rand2(-, )
dy1 = rand2(-, )
dz1 = rand2(-, ) ax2 = rand2(-, )
ay2 = rand2(-, )
az2 = rand2(-, )
bx2 = rand2(-, )
by2 = rand2(-, )
bz2 = rand2(-, )
cx2 = rand2(-, )
cy2 = rand2(-, )
cz2 = rand2(-, )
dx2 = rand2(-, )
dy2 = rand2(-, )
dz2 = rand2(-, ) ax3 = rand2(-, )
ay3 = rand2(-, )
az3 = rand2(-, )
bx3 = rand2(-, )
by3 = rand2(-, )
bz3 = rand2(-, )
cx3 = rand2(-, )
cy3 = rand2(-, )
cz3 = rand2(-, )
dx3 = rand2(-, )
dy3 = rand2(-, )
dz3 = rand2(-, ) u1 = pow((-u),)
u2 = *pow((-u),)*u
u3 = *u*u*(-u)
u4 = u*u*u ax = u1*ax0+u2*ax1+u3*ax2+u4*ax3
ay = u1*ay0+u2*ay1+u3*ay2+u4*ay3
az = u1*az0+u2*az1+u3*az2+u4*az3
bx = u1*bx0+u2*bx1+u3*bx2+u4*bx3
by = u1*by0+u2*by1+u3*by2+u4*by3
bz = u1*bz0+u2*bz1+u3*bz2+u4*bz3
cx = u1*cx0+u2*cx1+u3*cx2+u4*cx3
cy = u1*cy0+u2*cy1+u3*cy2+u4*cy3
cz = u1*cz0+u2*cz1+u3*cz2+u4*cz3
dx = u1*dx0+u2*dx1+u3*dx2+u4*dx3
dy = u1*dy0+u2*dy1+u3*dy2+u4*dy3
dz = u1*dz0+u2*dz1+u3*dz2+u4*dz3 v1 = pow((-v),)
v2 = *pow((-v),)*v
v3 = *v*v*(-v)
v4 = v*v*v x = v1*ax+v2*bx+v3*cx+v4*dx
y = v1*ay+v2*by+v3*cy+v4*dy
z = v1*az+v2*bz+v3*cz+v4*dz u = u*
v = v*

数学图形之贝塞尔(Bézier)曲面的更多相关文章

  1. 数学图形(1.47)贝塞尔(Bézier)曲线

    贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数学上予以描述. 上一节讲的是高次方程曲线, ...

  2. 数学图形之SineSurface与粽子曲面

    SineSurface直译为正弦曲面.这有可能和你想象的正弦曲线不一样.如果把正弦曲线绕Y轴旋转,得到的该是正弦波曲面.这个曲面与上一节中的罗马曲面有些相似,那个是被捏过的正四面体,这个则是个被捏过正 ...

  3. 数学图形之罗马曲面(RomanSurface)

    罗马曲面,像是一个被捏扁的正四面体. 本文将展示罗马曲面的生成算法和切图,使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815 维 ...

  4. 数学图形之将曲线(curve)转化成曲面管

    在我关于数学图形的博客中,一开始讲曲线的生成算法.然后在最近的章节中介绍了圆环,还介绍了螺旋管以及海螺的生成算法.一类是曲线,一类是环面,为什么不将曲线变成环的图形,毕竟曲线看上去太单薄了,这一节我将 ...

  5. WHY数学图形可视化工具(开源)

    WHY数学图形可视化工具 软件下载地址:http://files.cnblogs.com/WhyEngine/WhyMathGraph.zip 源码下载地址: http://pan.baidu.com ...

  6. 数学图形之Breather surface

    这是一种挺漂亮的曲面图形,可惜没有找到太多的相关解释. In differential equations, a breather surface is a mathematical surface ...

  7. 数学图形之Kuen Surface

    Kuen Surface应该又是一个以数学家名字命名的曲面.本文将展示几种Kuen Surface的生成算法和切图,其中有的是标准的,有的只是相似.使用自己定义语法的脚本代码生成数学图形.相关软件参见 ...

  8. 数学图形之Boy surface

    这是一个姓Boy的人发现的,所以取名为Boy surface.该图形与罗马图形有点相似,都是三分的图形.它甚至可以说是由罗马曲面变化而成的. 本文将展示几种Boy曲面的生成算法和切图,使用自己定义语法 ...

  9. 数学图形之克莱因瓶(klein bottle)

    克莱因瓶是一种内外两面在同一个曲面上的图形. 在数学领域中,克莱因瓶(德语:Kleinsche Flasche)是指一种无定向性的平面,比如二维平面,就没有“内部”和“外部”之分.克莱因瓶最初的概念提 ...

随机推荐

  1. auth.User.groups: (fields.E304)

    配置用户信息的models时,如果继承Abstractuser类时,报错: ERRORS:auth.User.groups: (fields.E304) Reverse accessor for 'U ...

  2. 硬盘 不属于Rom RAM

    是外置存储器, 不是ROM也不算RAM,rom是固化系统基本程序,如电脑的bios,ram是电脑的内存,平常说几个G内存就是指的RAM

  3. DML和DQL 总结

    一:MySql的存储引擎 问题的引入: 由于不同用户对数据的容量,访问速度,数据安全性有着不同的要求. 为了满足不同用户的需求,mysql数据库采用多种存储引擎来进行数据的存储! 1.1:查询mysq ...

  4. Cortex-M4 Core Registers

    Cortex-M4 Core Registers Goal: visualizing what happens to the Cortex-M4 core registers after reset ...

  5. Git 修复 bug 切换分支时,如何保存修改过的代码(即如何保存现场)?

    工作除了开发最新的版本之外还要对原来的版本做例行的维护,修修补补.于是有了在两个分支之间游走切换的问题,最新改版的代码在分支 new 上,旧版本的代码在分支 old 上,我在 new 上开发了一半,忽 ...

  6. Java-JVM-GC

    http://www.cnblogs.com/zhguang/p/Java-JVM-GC.html

  7. SAP BAPI一览 史上最全

    全BADI一览  List of BAPI's       BAPI WG Component Function module name Description Description Obj. Ty ...

  8. 为Qemu aarch32添加BeautifulSoup4模块

    环境 Qemu:2.8.0 开发板:vexpress-ca9   概述 上一篇博文已经可以让我们的开发板可以成功的ping通百度了,据说Python的网络功能也很强大,而Beautiful Soup是 ...

  9. javascript中{},[]中括号,大括号使用

    一.{ } 大括号,表示定义一个对象,大部分情况下要有成对的属性和值,或是函数. 如:var LangShen = {"Name":"Langshen",&qu ...

  10. IOS应用发布NSLog的注释及使用重定向,把控制台内容写入文件

    1 选择工程的Target -> Build Settings -> Preprocessor Macros. 如图,默认 Debug项,是“DEBUG=1”. 2 在程序中设置全局宏定义 ...