首页 > 代码库 > 数学图形之螺旋曲面
数学图形之螺旋曲面
这一节中将提供各种螺旋曲面的生成方法.
相关软件参见:数学图形可视化工具,使用自己定义语法的脚本代码生成数学图形.
我之前写过生成圆环的C++程序,代码发布在螺旋面(Spire)图形的生成算法
(1)正螺旋面
正螺旋面就是让一条直线l的初始位置与x轴重合,然后让直线l一边绕z轴作匀速转动,一边沿z轴方向作匀速运动,则直线在这两种运动的合成下扫出的曲面就是正螺旋面。
显然正螺旋面可以看做是由直线形成的,即它是一个直纹面。
为什么叫正,难道还有反吗?.看其公式,就是将圆向上拉了拉又多转了几圈.
vertices = D1:32 D2:360u = from 0 to 3 D1v = from 0 to (8*PI) D2x = u*cos(v)y = v*0.5z = u*sin(v)
(2)正螺旋面随机(helicoiddroit)
加上随机参数的正螺旋面,并向外拉伸了下.
vertices = D1:32 D2:360u = from 0 to 3 D1v = from 0 to (8*PI) D2a = rand2(0.1, 1)b = rand2(1, 5)x = (b + u)*cos(v)y = v*az = (b + u)*sin(v)
(3)阿基米德螺旋面
看其公式,阿基米德螺旋面就是正螺旋面变化了下高度参数
#http://202.113.29.3/nankaisource/graphics/differential%20geometry/t060307.htm#http://www.bb.ustc.edu.cn/jpkc/xiaoji/wjf/kj/vertices = D1:100 D2:360u = from 0 to (2) D1v = from 0 to (8*PI) D2x = -u/SQRT2*cos(v)y = u/SQRT2 + v/PI/2z = -u/SQRT2*sin(v)
(4)sincos螺旋面
vertices = D1:720 D2:72p = from 0 to (8*PI) D1q = from 0 to (PI) D2a = 5h = rand2(0.5, 5)x = a/2*(cos(p) + cos(q))y = h*(p + q)/2z = a/2*(sin(p) + sin(q))u = pv = q*3
(5)渐开螺旋面
#http://202.113.29.3/nankaisource/graphics/differential%20geometry/t060306.htm#http://www.bb.ustc.edu.cn/jpkc/xiaoji/wjf/kj/vertices = D1:100 D2:360u = from 0 to (4*PI) D1v = from 0 to (8*PI) D2x = 2*[cos(u+v) + u*sin(u+v)]y = vz = 2*[sin(u+v) - u*cos(u+v)]
(6)双曲正弦螺旋面
vertices = D1:360 D2:72u = from 0 to (5*PI) D1v = from 0 to (4*PI) D2a = 5h = rand2(5, 20)x = a*sh(u - v)*cos(u+v)y = h*(u + v)z = a*sh(u - v)*sin(u+v)w = 50x = limit(x, -w, w)z = limit(z, -w, w)
(7)Developable helicoid
#http://www.mathcurve.com/surfaces/helicoiddeveloppable/helicoiddeveloppable.shtmlvertices = dimension1:1000 dimension2:72u = from 0 to (18*PI) dimension1v = from 0 to (2*PI) dimension2a = rand2(1, 10)b = rand2(1, 10)x = a*(cos(u) - v*sin(u))z = a*(sin(u) + v*cos(u))y = b*(u + v)
(8)Helicoid_wiki
从维基上找的一种螺旋面:
#http://en.wikipedia.org/wiki/Catenoidvertices = D1:400 D2:100u = from (0) to (PI*16) D1v = from (0) to (4) D2t = rand2(-PI, PI)s = sin(t)c = cos(t)x = c*sinh(v)*sin(u) + s*cosh(v)*cos(u)z = u*c + v*sy = -c*sinh(v)*cos(u) + s*cosh(v)*sin(u)
(9)helicoidcercle
#http://www.mathcurve.com/surfaces/helicoidcercle/helicoidcercle.shtmlvertices = D1:72 D2:1200u = from 0 to (PI) D1v = from 0 to (36*PI) D2a = 1h = 1/(2*PI)x = a*cos(u)*cos(v)z = a*cos(u)*sin(v)y = b*sin(u) + h*v
再回到第一个脚本,正螺旋面中它的生成方式是:
"然后让直线l一边绕z轴作匀速转动,一边沿z轴方向作匀速运动"
如果用一条曲线一边绕z轴作匀速转动,一边沿z轴方向作匀速运动,那会生成何种曲面呢?
这样的话,每一种曲线都可以生成一种螺旋面.
这里再提供两个例子:
(10)幂螺旋面
vertices = D1:32 D2:360u = from 0 to 2 D1v = from 0 to (8*PI) D2a = rand2(-2, 2)w = pow(u, a)x = u*cos(v)y = v*0.5 + wz = u*sin(v)
(11)指螺旋面
vertices = D1:32 D2:360u = from 0 to 2 D1v = from 0 to (8*PI) D2a = rand2(0, 2)w = pow(a, u)x = u*cos(v)y = v*0.5 + wz = u*sin(v)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。