You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求Matplotlib代码绘制卫生纸卷式阿基米德螺旋3D圆柱

3D卫生纸卷(阿基米德螺旋)Matplotlib实现

嘿,这就给你整出符合要求的Matplotlib代码!既然你已经会基础圆柱绘制,那咱们直接搞定带阿基米德螺旋的卫生纸卷3D图形——结合你提到的总长度L=50的参数要求,我写了一段可直接运行的代码,还加了注释方便你调整参数:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# ---------------------- 参数设置(可按需调整) ----------------------
r_inner = 1.0               # 卷筒内半径
paper_thickness = 0.1       # 卫生纸单层厚度
total_length = 50.0         # 卫生纸总长度(你指定的L=50)
num_points = 10000          # 螺旋线采样点数,越多越平滑
z_scaling = 0.02            # z轴缩放系数,控制螺旋上升的幅度
# -------------------------------------------------------------------

# 1. 计算阿基米德螺旋的参数序列
# 阿基米德螺旋极坐标方程:ρ(θ) = r_inner + (厚度/(2π))*θ,每转一圈半径增加一个厚度
theta = np.linspace(0, 1000, num_points)
rho = r_inner + (paper_thickness / (2 * np.pi)) * theta

# 2. 计算螺旋线的累积长度,截断到指定总长度
dtheta = theta[1] - theta[0]
dL = np.sqrt(rho**2 + (paper_thickness/(2*np.pi))**2) * dtheta  # 长度元素
cumulative_L = np.cumsum(dL)
# 找到累积长度不超过总长度的最后一个点的索引
idx = np.where(cumulative_L <= total_length)[0][-1]
theta, rho, cumulative_L = theta[:idx+1], rho[:idx+1], cumulative_L[:idx+1]

# 3. 转换为3D笛卡尔坐标,让z轴随长度缓慢上升,模拟卷状效果
x = rho * np.cos(theta)
y = rho * np.sin(theta)
z = cumulative_L * z_scaling

# 4. 创建3D绘图并绘制元素
fig = plt.figure(figsize=(10, 8))
ax = fig.add_subplot(111, projection='3d')

# 绘制卫生纸螺旋边缘线
ax.plot(x, y, z, linewidth=2, color='#f5deb3', label='Toilet Paper Spiral')

# 绘制内卷筒(灰色半透明圆柱)
theta_cyl = np.linspace(0, 2*np.pi, 100)
z_cyl = np.linspace(min(z), max(z), 50)
theta_cyl, z_cyl = np.meshgrid(theta_cyl, z_cyl)
x_cyl = r_inner * np.cos(theta_cyl)
y_cyl = r_inner * np.sin(theta_cyl)
ax.plot_surface(x_cyl, y_cyl, z_cyl, alpha=0.3, color='gray', label='Inner Roll')

# 5. 美化绘图细节
ax.set_xlabel('X Axis')
ax.set_ylabel('Y Axis')
ax.set_zlabel('Z Axis')
ax.set_title('3D Toilet Paper Roll with Archimedean Spiral')
ax.legend()
ax.view_init(elev=30, azim=45)  # 调整视角,你可以拖动窗口改变角度

plt.show()

代码说明:

  • 参数部分可以随意调整:比如增大paper_thickness会让螺旋线变“胖”得更快,修改z_scaling可以控制螺旋在z轴方向的上升幅度;
  • 核心逻辑是用累积长度截断的方式确保螺旋线总长度严格等于你指定的L=50,避免了复杂的积分反推;
  • 内卷筒用半透明灰色圆柱绘制,和黄色的螺旋线形成对比,更贴近卫生纸卷的实际样子。

内容的提问来源于stack exchange,提问作者nithin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:43:01