我知道如何获得一个圆柱体,但我想描绘一些类似卫生纸卷的图形,该图形在圆柱体表面上绘制了阿基米德螺旋线。
How to parameterize a curved cylinder?
但是我需要的是像情节一样的厕纸。
我想出了这背后的数学原理,有人可以帮助我使用python吗?我需要针对以下等式以3D形式绘制它 实际上,公式
我想使用L作为参数,等式变为
这里h是金属厚度,r是轧辊的内半径。该公式使用螺旋辊的圆近似值。我也知道长度L = 50有人可以帮我提供matplotlib代码
这正是我所需要的 http://pgfplots.net/tikz/examples/cylinder-spiral/请查看此链接
答案 0 :(得分:0)
下面是解决方案,我以某种方式想出了办法,如果有人帮助我改善解决方案,我会很高兴
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()
答案 1 :(得分:0)
以原点和半径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()
由于您拥有有效的代码,因此可以将其发布在Code review Stack Exchange中,在这里我可以用排版数学进行解释。