博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数学图形之圆柱面
阅读量:4671 次
发布时间:2019-06-09

本文共 2947 字,大约阅读时间需要 9 分钟。

这一节将为你展示如何生成圆柱面,以及和圆柱面相关的图形,如鼓形,齿轮等

相关软件参见:,使用自己定义语法的脚本代码生成数学图形.

我之前写过生成圆柱的C++程序,代码发布在.

 

(1)圆柱面

vertices = dimension1:72 dimension2:72u = from 0 to (2*PI) dimension1v = from (-5) to (5) dimension2r = 5x = r*cos(u)y = vz = r*sin(u)

(2)任意角度圆柱面

vertices = dimension1:72 dimension2:72u = from (-5) to (5) dimension2v = from 0 to (2*PI) dimension1a = rand2(0, 2*PI)b = rand2(0, 2*PI)c = sin(v)d = cos(v)e = sin(b)f = cos(b)g = sin(a)h = cos(a)x = f*h*d - f*g*c + e*uy = g*d + h*cz = -e*h*d + e*g*c + f*ux = x*5y = y*5z = z*5

代码中会随机设置圆柱的旋转角度

(3)圆柱体

将圆柱面的两头封上,生成闭合的圆柱体

vertices = dimension1:72 dimension2:72u = from 0 to (2*PI) dimension1v = from (-5) to (5) dimension2r = if(abs(v) < 4.9, 5, 0)x = r*cos(u)y = vz = r*sin(u)

(4)由曲线生成的圆柱面

#http://www.mathcurve.com/surfaces/cylindrederevolution/cylindrederevolution.shtmlvertices = D1:100 D2:100u = from 0 to (2*PI) D1v = from 0 to (PI) D2a = rand2(1, 10)x = a*cos(u - v)z = a*sin(u - v)y = a*( u+v)

(5)鼓形

我之前写过生成鼓形的C++程序,代码发布在

这里和之前的不太一样,为了简单,我对鼓的隆起使用了SIN函数.

vertices = dimension1:72 dimension2:72u = from 0 to (2*PI) dimension1v = from (-1) to (1) dimension2r = 5h = rand2(1, r)t = h*cos(v*PI/2)p = if(t > 0.01, r+t, 0) x = p*cos(u)y = v*hz = p*sin(u)

新的鼓形脚本,这个比上一个要圆润得多:

vertices = dimension1:72 dimension2:72u = from 0 to (2*PI) dimension1v = from (-PI/2) to (PI/2) dimension2r = 5h = rand2(1, r)t = h*cos(v)p = if(t > 0.01, r+t, 0) x = p*cos(u)y = h*sin(v)z = p*sin(u)

(6)齿轮

我之前写过生成齿轮的C++程序,代码发布在

vertices = D1:65 D2: 4u = from 0 to (2*PI) D1v = from -1 to 1 D2k = from 0 to 64 D1m = mod(k, 2)r = 10.0 + m*2a = 0.9b = in_range(v, -a, a)x = r*sin(u)*bz = r*cos(u)*by = if(b, v, v/3)*3

(7)刺柱

为什么我看到这个有刺的柱子,会想到满清十大酷刑.

vertices = D1:129 D2:65u = from 0 to (2*PI) D1v = from (-20) to (20) D2n = 4a = from 0 to 128 D1b = from 0 to 64 D2t = (mod(a, n) + mod(b, n))/n*4r = 10 + tx = r*cos(u)y = vz = r*sin(u)

(8)蛏形

vertices = D1:100 D2:100u = from 0 to (2*PI) D1v = from -5 to 5 D2r = 5x = r*cos(u)z = r*sin(u)y = x*v

(9)指定方向的圆柱(极坐标原理)

vertices = dimension1:72 dimension2:72u = from (0) to (5) dimension2v = from 0 to (2*PI) dimension1a = rand2(-2, 2)b = rand2(-2, 2)c = rand2(-2, 2)ac = sqrt(a*a + c*c)angleY = atan2(ac, b)angleXZ = atan2(a,c)m = cos(v)n = sin(v)e = sin(angleY)f = cos(angleY)g = sin(angleXZ)h = cos(angleXZ)x0 = my0 = u*f - n*ez0 = u*e + n*fx1 = x0*h + z0*gy1 = y0z1 = -x0*g + z0*hx = x1 + ay = y1 + bz = z1 + c

 

(10)指定方向的圆柱(矩阵原理)

vertices = dimension1:72 dimension2:72u = from (0) to (5) dimension2v = from 0 to (2*PI) dimension1a = rand2(-2, 2)b = rand2(-2, 2)c = rand2(-2, 2)len = sqrt(a*a + b*b + c*c)len = max(len, 0.00001)px = a/lenpy = b/lenpz = c/lenqx = 0qy = pzqz = -py len = sqrt(qx*qx + qy*qy + qz*qz)len = max(len, 0.00001)qx = qx/lenqy = qy/lenqz = qz/lenwx = py*qz - pz*qywy = pz*qx - px*qzwz = px*qy - py*qxx0 = cos(v)y0 = uz0 = sin(v)x = x0*wx + y0*px + z0*qx + ay = x0*wy + y0*py + z0*qy + bz = x0*wz + y0*pz + z0*qz + c

 

转载于:https://www.cnblogs.com/WhyEngine/p/3867220.html

你可能感兴趣的文章
[MySQL 5.6] MySQL 5.6 group commit 性能测试及内部实现流程
查看>>
定时器与锁
查看>>
Tomcat的部署+第一个Servlet
查看>>
javaweb中解决中文乱码问题
查看>>
3-8《Ruby元编程》第二章对象模型
查看>>
987. Binary Number with Alternating Bits
查看>>
十四、Hadoop学习笔记————Zookeeper概述与基本概念
查看>>
回调函数的原理及PHP实例
查看>>
卸载驱动出现:rmmod: can't change directory to '/lib/modules': No such file or directory
查看>>
Scratch与物理·天文:模拟中国嫦娥探月工程,探索月球的背面!
查看>>
大话数据结构 -04-3 队列
查看>>
插入排序算法(C实现)
查看>>
多线程技术 初步
查看>>
Linux_基础_软件包管理
查看>>
DPDK 16.04/16.11.2 默认tx offload是关闭的引起tx vlan offload无效
查看>>
VS2019中,一个解决方案拥有多个项目,如何快速选择启动项目
查看>>
E20170816-mk
查看>>
E20180404-ts
查看>>
hibernate的数据关联映射
查看>>
验证码的例子(转)
查看>>