为了账号安全,请及时绑定邮箱和手机立即绑定

我如何绘制一个类似于卫生纸的圆柱体。旋转阿基米德螺旋形成圆柱体

我如何绘制一个类似于卫生纸的圆柱体。旋转阿基米德螺旋形成圆柱体

哈士奇WWW 2021-12-09 15:48:48
我知道如何得到一个圆柱体,但我想描绘一些东西,比如卫生纸卷,用圆柱体在表面绘制阿基米德螺线。但我需要的是像情节一样的卫生纸卷。我想出了这背后的数学问题有人可以帮助我使用 python 我需要在 3D 中绘制它以获得以下等式 在实践中公式 我想用 L 作为参数,我的方程变成这里 h 是金属厚度,r 是轧辊的内半径。该公式使用螺旋辊的圆形近似值。我也知道长度 L =50 有人可以帮我写 matplotlib 代码吗这正是我需要的 http://pgfplots.net/tikz/examples/ cylinder-spiral/ 有人可以帮我把它放在 Matplotlib 中吗
查看完整描述

1 回答

?
慕虎7371278

TA贡献1802条经验 获得超4个赞

以原点和半径r为圆心的圆的参数方程为, x = r \times sin(\theta) y = r \times cos(\theta) 其中\theta \in [0,2\pi]。


对于螺旋,半径随着 \$\theta\$ 增加。假设 \$r\$ 依赖,\theta因为r = (a+b\theta)它可以, x = (a+b\theta) sin(\theta) y = (a+b\theta) cos(\theta)


要使其成为具有垂直轴的 3D 图形,您可以添加圆柱体的长度z在linspace(0, L)哪里L。


import matplotlib.pyplot as plt

from mpl_toolkits.mplot3d import Axes3D

import math

import numpy as np


L = 50

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

xpoints=[]

ypoints=[]

a = 0.1

b = 0.1


for theta in np.linspace(0, 2*math.pi, 20):

    xpoints.append((a+b*theta)*math.cos(theta))

    ypoints.append((a+b*theta)*theta*math.sin(theta))

    z = np.linspace(0,L)

    theta, z = np.meshgrid(theta, z)

ax.plot_surface(xpoints,ypoints,z)

plt.show()

既然你有一个工作代码,你可以把它发布在代码审查堆栈交换中,我可以在那里用排版数学来解释。

//img1.sycdn.imooc.com//61b1b5190001b69705900357.jpg

以下是我以某种方式想出的解决方案,如果有人帮助我改进我的解决方案,我会很高兴


L = 50

h= 0.5

r= 5.0[![plot][1]][1]

R = np.sqrt((L*h)/(np.pi)+r**r)

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

xpoints=[]

ypoints=[]


for theta in np.linspace(0,20,R):

        xpoints.append(1.1*theta*cos(theta))

        ypoints.append(1.1*theta*sin(theta))

        z = np.linspace(0,R)

        theta, z = np.meshgrid(t, z)

ax.plot_surface(xpoints,ypoints,z)

plt.show()


查看完整回答
反对 回复 2021-12-09
  • 1 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信