随笔 - 373  文章 - 1  评论 - 771  阅读 - 137万

数学图形之锥体

这一节将为你展示如何生成锥体面,以及各种与锥体相关的图形,有金字塔,五角星,圆锥,冰淇淋, 正劈锥体等.

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

我之前写过生成圆锥的C++程序,代码发布在圆锥(Cone)图形的生成算法.

(1)圆锥面

vertices = dimension1:72 dimension2:72

u = from 0 to (2*PI) dimension1
v = from (-5) to (5) dimension2

x = v*cos(u)
y = v
z = v*sin(u)

(2)椭圆锥面

复制代码
#http://www.mathcurve.com/surfaces/coneelliptique/coneelliptique.shtml
vertices = D1:100 D2:100
v = from 0 to (2*PI) D1
u = from (-1) to (1) D2
a = rand2(1, 10)
b = rand2(1, 10)
h = rand2(0.5, 10)
x = a*u*cos(v)
z = b*u*sin(v)
y = h*u
复制代码

(3)二维直线绕X轴旋转生成圆锥面

复制代码
vertices = D1:360 D2:100

u = from -10 to 10 D1
v = from 0 to (2*PI) D2


a = rand2(-5, 5)
b = rand2(-5, 5)
c = rand2(-2, 2)

x = u
n = c*(x + a) + b

y = n*cos(v)
z = n*sin(v)
复制代码

(4)二维直线绕Y轴旋转生成圆锥面

复制代码
vertices = D1:360 D2:100

u = from -10 to 10 D1
v = from 0 to (2*PI) D2


a = rand2(-5, 5)
b = rand2(-5, 5)
c = rand2(-2, 2)

y = c*(u + a) + b

x = u*cos(v)
z = u*sin(v)
复制代码

(5)金字塔

复制代码
vertices = dimension1:5 dimension2:20

u = from 0 to (2*PI) dimension1
v = from 0 to (1) dimension2

r = if (v<0.99, 10, 0)

x = r*v*cos(u)
z = r*v*sin(u)

y = 8*(1-v)
复制代码

(6)五星

复制代码
vertices = dimension1:11 dimension2:4

u = from 0 to (2*PI) dimension1
v = from 0 to (1) dimension2

k = from 0 to 10 D1
m = mod(k, 2)

t = 10.0 - m*GOLD*10
r = if(v < 0.99, t, 0)

x = r*v*cos(u)
z = r*v*sin(u)

y = 2*(1-v)
复制代码

(7)N角星

复制代码
vertices = dimension1:360 dimension2:4

u = from 0 to (2*PI) dimension1
v = from 0 to (1) dimension2

n = rand_int2(4, 32)*2

k = from 0 to (n) D1
m = abs(mod(k, 2) - 1)

t = 10.0 - m*GOLD*10
r = if(v < 0.99, t, 0)

x = r*v*cos(u)
z = r*v*sin(u)

y = 2*(1-v)
复制代码

(8)风车

复制代码
vertices = dimension1:72 dimension2:4

u = from 0 to (2*PI) dimension1
v = from 0 to (1) dimension2

k = from 0 to 8 D1
m = mod(k, 2)

t = 10.0 - m*GOLD*10
r = if(v < 0.99, t, 0)

x = r*v*cos(u)
z = r*v*sin(u)

y = 2*(1-v)
复制代码

(9)冰淇淋

复制代码
vertices = dimension1:72 dimension2:72

u = from 0 to (2*PI) dimension1
v = from 0 to (PI) dimension2

r = 10.0

x = r*sin(v)*sin(u)
y = r*cos(v)
z = r*sin(v)*cos(u)

a = rand2(PI/2, PI*0.8)
d = -r*4
t = r*cos(a)

e = (v - a)/(PI - a)
w = r*sin(a)*(1 - e)

h = t + e*(d - t)
i = w*sin(u)
j = w*cos(u)

x = if(e < 0.0, x, i)
y = if(e < 0.0, y, h)
z = if(e < 0.0, z, j)
复制代码

 

(10)曲线绕Y轴旋转生成圆锥面

#http://www.mathcurve.com/surfaces/conederevolution/conederevolution.shtml
vertices = D1:100 D2:100
v = from (-PI) to (PI) D1
u = from (-PI) to (PI) D2
a = rand2(0, PI*0.45)
x = a*(cos(v) + cos(u))
z = a*(sin(u) + sin(v))
y = 2*a*cot(a)*cos((u-v)/2)

 

(11)任意朝向的圆锥

复制代码
vertices = D1:72 D2:72
u = from 0 to (2) D2
v = from 0 to (2*PI) D1

a = 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*3 + e*c
y = g*d + h*3
z = -e*h*d + e*g*3 + f*c

x = x*u
y = y*u
z = z*u

x = x*5
y = y*5
z = z*5
复制代码

 

(12)正劈锥体

复制代码
#http://www.mathcurve.com/surfaces/coinconic/coinconic.shtml
vertices = D1:100 D2:100
v = from 0 to (2*PI) D1
u = from -10 to 10 D2
a = rand2(1, 10)
b = rand2(1, 10)
k = b/a
x = u
z = k*u*cos(v)
y = k*a*sin(v)
复制代码

 

posted on   叶飞影  阅读(2435)  评论(1编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示