前面章节中讲了贝塞尔(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. CSUOJ Water Drinking

    Description The Happy Desert is full of sands. There is only a kind of animal called camel living on ...

  2. 【翻译】 What is class diagram(什么是类图)?

    [翻译] What is class diagram(什么是类图)? 写在翻译之前 这是一篇关于UML的英文博客的翻译,是我们的老师在教授我们UML类图的时候推荐给我们的,为了学习UML顺便学习英语, ...

  3. WEP/WPA-PSK密码破解工具aircrack-ng

    WEP/WPA-PSK密码破解工具aircrack-ng   aircrack-ng是Aircrack-ng工具集中的一个工具.该工具主要用于根据已经抓取的.cap文件或者.ivs文件破解出WEP/W ...

  4. centos7 静默安装oracle

    系统centos7.4 mini 关闭selinux.firewalld 配置主机名: hostnamectl set-hostname  --static oracle 之前说oracle不认cen ...

  5. 【BZOJ-3730】震波 动态点分治 + 树状数组

    3730: 震波 Time Limit: 15 Sec  Memory Limit: 256 MBSubmit: 626  Solved: 149[Submit][Status][Discuss] D ...

  6. MEF框架简介

    下面主要介绍一下MEF的架构,希望从总体上有所了解,更改OpenExpressApp后我会再写篇文章介绍一下如何在OpenExpressApp中使用MEF的. 主要示意图 各种Export提供者从目录 ...

  7. Syntactic and Semantic Errors

    There are two kinds of errors that Basis can find. Syntax errors occur during the parsing of input c ...

  8. 《Go语言实战》摘录:6.4 并发 - 锁住共享资源

    6.4 锁住共享资源

  9. 【Go命令教程】命令汇总

    [Go命令教程]1. 标准命令详解 [Go命令教程]2. go build [Go命令教程]3. go install [Go命令教程]4. go get [Go命令教程]5. go clean [G ...

  10. 向OSG视图Viewer发送消息

    句柄是以下面的方式传递给osgViewer::Viewer的,osgViewer::View.getCamera().setGraphicsContext(osg::GraphicsContext); ...