数学图形之将曲线转化为曲面

本文将展示几种基本图形的生成算法,包括:圆面,圆球,圆柱,圆锥,圆环,圆管,螺旋环,圆螺,五角环,金字塔,正8面体.使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.

之前我写过一篇文章:数学图形之将曲线(curve)转化成曲面管,写完之后,意识到这种生成曲面管的脚本代码太过复杂了.本来其输入为曲线+管的半径,那么完全可以将其改成一句话的形式.我需要在生成曲线的代码后面加上一句话就可以将其转化成曲面管.pipe = radius[0.5], type[0]

实现了由"pipe"脚本解析后,我想到曲线是可以通过旋转,缩放,平移,这三种基础的图形变换,转化成曲面的.OK,于是又实现了如下的语法:

(1)绕空间中任意一条直线进行旋转, 可以生成旋转面

rotate = anchor[0, 0, 0], axis[0,1, 0], angle[0, 2*PI]

(2)沿着一个任意朝向移动顶点, 可以生成柱面
translate = dir[0, 1, 0], dis[0, 5]

(3)以空间中任意一点为基点,对曲线上的顶点进行缩放
scale = anchor[0, 0, 0], x[1, 0], z[1, 0]

最后,由曲线到曲面会增加一个维度的数据,需要设置其数据大小:surface_slices = 72

下面将展示使用这几种新加的语句生成的图形与脚本代码:

圆面

vertices = 360
u = from 0 to (2*PI)
r = 5.0
x = r*sin(u)
y = r*cos(u)

scale = anchor[0, 0, 0], x[1, 0], y[1, 0]

圆球

常规生成球面的算法参见:数学图形之球面

vertices = 360
u = from 0 to (PI)
r = 2.0
x = r*sin(u)
y = r*cos(u)

rotate = anchor[0, 0, 0], axis[0,1, 0], angle[0, 2*PI]

圆柱

常规生成圆柱的算法参见:数学图形之圆柱面

vertices = 360
u = from 0 to (2*PI)
r = 2.0
x = r*sin(u)
z = r*cos(u)

translate = dir[0, 1, 0], dis[0, 5]

圆锥

常规生成圆锥的算法参见:数学图形之锥体

vertices = 360
u = from 0 to (2*PI)
r = 2.0
x = r*sin(u)
z = r*cos(u)

translate = dir[0, 1, 0], dis[0, 5]
scale = anchor[0, 0, 0], x[1, 0], z[1, 0]

圆环

常规生成圆环的算法参见:数学图形之圆环

vertices = 360
u = from 0 to (2*PI)
r = 2.0
x = r*sin(u) + 5
y = r*cos(u)

surface_slices = 72
rotate = anchor[0, 0, 0], axis[0,1, 0], angle[0, 2*PI]

圆管

vertices = 360
u = from 0 to (2*PI)
r = 5.0
x = r*sin(u)
z = r*cos(u)

pipe = radius[0.5], type[0]

螺旋环

常规生成螺旋环的算法参见:数学图形之螺旋管

vertices = 100
u = from 0 to (2*PI)
r = 1.0
x = r*sin(u) + 5
y = r*cos(u)

surface_slices = 200
rotate = anchor[0, 0, 0], axis[0, 1, 0], angle[0, 8*PI]
translate = dir[0, 1, 0], dis[0, 9]

圆螺

vertices = 100
u = from 0 to (2*PI)
r = 1.0
x = r*sin(u) + 5
y = r*cos(u)

surface_slices = 200
scale = anchor[0, 0, 0], x[1, 0], y[1, 0]
rotate = anchor[0, 0, 0], axis[0, 1, 0], angle[0, 8*PI]
translate = dir[0, 1, 0], dis[0,6]

五角环

vertices =6
u = from 0 to (2*PI)
r = 2.0
x = r*sin(u) + 5
y = r*cos(u)

surface_slices = 6
rotate = anchor[0, 0, 0], axis[0,1, 0], angle[0, 2*PI]

金字塔

vertices =5
u = from 0 to (2*PI)
r = 2.0
x = r*sin(u)
z = r*cos(u)
surface_slices = 3
translate = dir[0, 1, 0], dis[0, 2]
scale = anchor[0, 0, 0], x[1, 0], z[1, 0]

正8面体

vertices =3
u = from 0 to (PI)
r = 2.0
x = r*sin(u)
y = r*cos(u)
surface_slices = 5
rotate = anchor[0, 0, 0], axis[0,1, 0], angle[0, 2*PI]

数学图形之将曲线转化为曲面

时间: 2024-10-08 11:19:33

数学图形之将曲线转化为曲面的相关文章

[从头学数学] 第238节 曲线积分与曲面积分

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了元婴期的修炼. 这次要修炼的是数学分析(或称高等数学.或称微积分). 正剧开始: 星历2016年06月03日 15:21:59, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[曲线积分与曲面积分]. 本节到此结束,欲知后事如何,请看下回分解.

数学图形之贝塞尔(Bézier)曲面

前面章节中讲了贝塞尔(Bézier)曲线,而贝塞尔曲面是对其多一个维度的扩展.其公式依然是曲线的公式: . 而之所以由曲线变成曲面,是将顶点横向连了再纵向连. 很多计算机图形学的教程都会有贝塞尔曲面的DEMO.而这里,我依然是使用我制定的脚本代码生成贝塞尔曲面.代码中的控制顶点坐标为随机数生成,所以每次生成的曲面图形都不一样. 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.该软件免费开源.QQ交流群: 367752815 二次贝塞尔曲面: 需要生成3*3个控制顶点 v

数学图形之螺旋曲面

这一节中将提供各种螺旋曲面的生成方法. 相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形. 我之前写过生成圆环的C++程序,代码发布在螺旋面(Spire)图形的生成算法 (1)正螺旋面 正螺旋面就是让一条直线l的初始位置与x轴重合,然后让直线l一边绕z轴作匀速转动,一边沿z轴方向作匀速运动,则直线在这两种运动的合成下扫出的曲面就是正螺旋面. 显然正螺旋面可以看做是由直线形成的,即它是一个直纹面. 为什么叫正,难道还有反吗?.看其公式,就是将圆向上拉了拉又多转了几圈. ve

数学图形之SineSurface与粽子曲面

SineSurface直译为正弦曲面.这有可能和你想象的正弦曲线不一样.如果把正弦曲线绕Y轴旋转,得到的该是正弦波曲面.这个曲面与上一节中的罗马曲面有些相似,那个是被捏过的正四面体,这个则是个被捏过正方体. 本文将展示SineSurface与粽子曲面的生成算法和切图,使用自己定义语法的脚本代码生成数学图形.相关软件参见:数学图形可视化工具,该软件免费开源.QQ交流群: 367752815 这是从http://mathworld.wolfram.com/SineSurface.html上找到的一种

数学图形(2.3)绕在圆环上的曲线

前面讲了N叶结,当N值越大时,你会发现整个图形越像一个圆环.这一节就讲其他几种绕在圆环上的曲线. vertices = 12000 t = from 0 to (64*PI) p = rand_int2(2, 32) q = rand_int2(2, 32) r = 2 + cos(q/p*t) x = r*sin(t) y = sin(q/p*t) z = r*cos(t) r = 0.5 + 0.5*sin(t) g = 0.5 + 0.5*y b = 0.5 + 0.5*cos(t) 另一

数学图形(2.20)3D曲线

这一节主要是发布我自己写的3D曲线, (1)立体flower线圈 vertices = 8000 a = 10.1 b = 3.1 s = (a + b) / b o = 4 i = from 0 to (40*2*PI) j = mod(i, 2*PI) k = mod(s*i, 2*PI) m = a*sin(j) n = a*cos(j) x = m + o*sin(k) y = n z = o*cos(k) (2)乱 vertices = 12000 t = from (0.0) to

数学图形(1.49)Nephroid曲线

昨天IPhone6在国内发售了,我就顺手发布个关于肾的图形.Nephroid中文意思是肾形的.但是这种曲线它看上去却不像个肾,当你看到它时,你觉得它像什么就是什么吧. The name nephroid (meaning 'kidney shaped') was used for the two-cusped epicycloid by Proctor in 1878. The nephroid is the epicycloid formed by a circle of radius a r

数学图形(1.46)高次方程曲线

这一节让大家回忆下高中所学的数学.整式方程未知数次数最高项次数高于2次的方程,称为高次方程.高次方程解法思想是通过适当的方法,把高次方程化为次数较低的方程求解.对于5次及以上的一元高次方程没有通用的代数解法和求根公式(即通过各项系数经过有限次四则运算和乘方和开方运算无法求解),这称为阿贝尔定理.不过这一节中我的目的不是求方程的根,而是绘制出N次函数的曲线. 高次方程一般形式可以写为: x^n+bnx^n-1+-------b1x+b0=0 数学课中我们学过,二次方程的曲线是一个抛物线,三次方程的

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

贝塞尔曲线又称贝兹曲线或贝济埃曲线,是由法国数学家Pierre Bézier所发现,由此为计算机矢量图形学奠定了基础.它的主要意义在于无论是直线或曲线都能在数学上予以描述. 上一节讲的是高次方程曲线,其实贝塞尔曲线就是高次函数曲线.研究贝塞尔曲线的人最初是按照已知曲线参数方程来确定四个点的思路设计出这种矢量曲线绘制法.涕淌为了向大家 介绍贝塞尔曲线的公式,也故意把问题的已知和所求颠倒了一下位置:如果已知一条曲线的参数方程,系数都已知,并且两个方程里都含有一个参数t,它的值介于 0.1之间,表现形