数学图形之贝塞尔(Bézier)曲面
前面章节中讲了贝塞尔(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.47)贝塞尔(Bézier)曲线
贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数学上予以描述. 上一节讲的是高次方程曲线, ...
- 数学图形之SineSurface与粽子曲面
SineSurface直译为正弦曲面.这有可能和你想象的正弦曲线不一样.如果把正弦曲线绕Y轴旋转,得到的该是正弦波曲面.这个曲面与上一节中的罗马曲面有些相似,那个是被捏过的正四面体,这个则是个被捏过正 ...
- 数学图形之罗马曲面(RomanSurface)
罗马曲面,像是一个被捏扁的正四面体. 本文将展示罗马曲面的生成算法和切图,使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815 维 ...
- 数学图形之将曲线(curve)转化成曲面管
在我关于数学图形的博客中,一开始讲曲线的生成算法.然后在最近的章节中介绍了圆环,还介绍了螺旋管以及海螺的生成算法.一类是曲线,一类是环面,为什么不将曲线变成环的图形,毕竟曲线看上去太单薄了,这一节我将 ...
- WHY数学图形可视化工具(开源)
WHY数学图形可视化工具 软件下载地址:http://files.cnblogs.com/WhyEngine/WhyMathGraph.zip 源码下载地址: http://pan.baidu.com ...
- 数学图形之Breather surface
这是一种挺漂亮的曲面图形,可惜没有找到太多的相关解释. In differential equations, a breather surface is a mathematical surface ...
- 数学图形之Kuen Surface
Kuen Surface应该又是一个以数学家名字命名的曲面.本文将展示几种Kuen Surface的生成算法和切图,其中有的是标准的,有的只是相似.使用自己定义语法的脚本代码生成数学图形.相关软件参见 ...
- 数学图形之Boy surface
这是一个姓Boy的人发现的,所以取名为Boy surface.该图形与罗马图形有点相似,都是三分的图形.它甚至可以说是由罗马曲面变化而成的. 本文将展示几种Boy曲面的生成算法和切图,使用自己定义语法 ...
- 数学图形之克莱因瓶(klein bottle)
克莱因瓶是一种内外两面在同一个曲面上的图形. 在数学领域中,克莱因瓶(德语:Kleinsche Flasche)是指一种无定向性的平面,比如二维平面,就没有“内部”和“外部”之分.克莱因瓶最初的概念提 ...
随机推荐
- ABP单元测试
一.介绍 在本文中,我将介绍如何为基于ASP.NET Boilerplate的项目创建单元测试. 我将使用本文开发的相同的应用程序(使用AngularJs,ASP.NET MVC,Web API和En ...
- BZOJ.4695.最假女选手(线段树 Segment tree Beats!)
题目链接 区间取\(\max,\ \min\)并维护区间和是普通线段树无法处理的. 对于操作二,维护区间最小值\(mn\).最小值个数\(t\).严格次小值\(se\). 当\(mn\geq x\)时 ...
- Xcode6 iOS7模拟器和Xcode7 iOS8模拟器离线下载
Xcode6 只支持iOS7和iOS8的模拟器 Xcode7 只支持iOS9和iOS8的模拟器 Xcode 并不会识别 SDKs 目录下的模拟器,我经过一些尝试以后,发现要放在这个目录下: /Libr ...
- 回顾JavsScript对象的克隆
JS对象的数据类型分为两大类:原始类型(string, boolean, number,undefined, function)和 对象类型(array, object, null). 1.浅度克隆 ...
- 防止shell脚本长时间执行导致ssh超时
在一些对安全性要求较高的场景下.ssh的超时时间是管理员预先设置好的,在闲置一段时间后ssh连接会自己主动断开. 这样的情况下假设通过ssh运行脚本,而脚本运行时间又比較长的话.会导致sshclien ...
- [Android 动画]简要分析一下Animator 与 Animation
大家假设喜欢我的博客,请关注一下我的微博,请点击这里(http://weibo.com/kifile),谢谢 转载请标明出处(http://blog.csdn.net/kifile),再次感谢 在 A ...
- C# Windows服务开发从入门到精通
一.课程介绍 大家都知道如果想要程序一直运行在windows服务器上,最好是把程序写成windows服务程序:这样程序会随着系统的自动启动而启动,自动关闭而关闭,不需要用户直接登录,直接开机就可以启动 ...
- 自己动手实现一个MVVM库
我们知道的,常见的数据绑定的实现方法 1.数据劫持(vue):通过Object.defineProperty() 去劫持数据每个属性对应的getter和setter2.脏值检测(angular):通过 ...
- RxJS 简介:可观察对象、观察者与操作符
RxJS 简介:可观察对象.观察者与操作符 对于响应式编程来说,RxJS 是一个不可思议的工具.今天我们将深入探讨什么是 Observable(可观察对象)和 observer(观察者),然后了解如何 ...
- AngularJS表单验证,手动验证或自动验证
AngularJS的表单验证大致有两种,一种是手动验证,一种是自动验证. 手动验证 所谓手动验证是通过AngularJS表单的属性来验证.而成为AngularJS表单必须满足两个条件:1.给form元 ...