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

如何用Matplotlib绘制截锥涡旋,构建日冕孔初步数学模型?

实现带扭转效果的截锥日冕孔模型

Hey there! 针对你日冕孔模型的需求,我把普通圆柱扩展成了径向随高度比例增长+θ-z方向扭转的截锥,还加了可视化扭转的辅助线条,直接看代码和解释吧:

完整代码

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

# 设置可调参数,你可以根据模型需求修改
r0 = 1.0  # 截锥底部半径
alpha = 0.5  # 径向扩张比例(每单位高度,半径增加r0*alpha)
beta = np.pi / 2  # 扭转强度(每单位高度扭转的弧度,这里是90度)
z_min = 0
z_max = 3

# 创建角度θ和高度z的网格
theta = np.linspace(0, 2*np.pi, 50)
z = np.linspace(z_min, z_max, 30)
theta_grid, z_grid = np.meshgrid(theta, z)

# 1. 生成截锥的半径:随高度呈比例增长
radius = r0 * (1 + alpha * z_grid)

# 2. 添加扭转效果:每个高度z处的角度随z线性偏移
twisted_theta = theta_grid + beta * z_grid

# 转换为笛卡尔坐标用于3D绘图
x = radius * np.cos(twisted_theta)
y = radius * np.sin(twisted_theta)

# 创建绘图对象
fig = plt.figure(figsize=(10,8))
ax = fig.add_subplot(111, projection='3d')

# 绘制截锥表面
surface = ax.plot_surface(x, y, z_grid, cmap='viridis', alpha=0.7, edgecolor='k')

# 添加扭转可视化线条:取几个固定初始角度,画出随z上升的扭转路径
initial_thetas = [0, np.pi/2, np.pi, 3*np.pi/2]
colors = ['red', 'blue', 'green', 'orange']
for theta0, color in zip(initial_thetas, colors):
    z_line = np.linspace(z_min, z_max, 100)
    r_line = r0 * (1 + alpha * z_line)
    theta_line = theta0 + beta * z_line
    x_line = r_line * np.cos(theta_line)
    y_line = r_line * np.sin(theta_line)
    ax.plot(x_line, y_line, z_line, color=color, linewidth=2, label=f'θ₀={theta0/np.pi}π')

# 添加箭头增强扭转效果(可选,可根据需要增减)
for z_arrow in np.linspace(z_min, z_max, 5):
    r_arrow = r0 * (1 + alpha * z_arrow)
    theta_arrow = beta * z_arrow
    # 箭头起点和终点(沿扭转方向)
    x_start = r_arrow * np.cos(theta_arrow)
    y_start = r_arrow * np.sin(theta_arrow)
    x_end = r_arrow * np.cos(theta_arrow + 0.1)
    y_end = r_arrow * np.sin(theta_arrow + 0.1)
    ax.quiver(x_start, y_start, z_arrow, x_end-x_start, y_end-y_start, 0, color='black', length=0.3)

# 设置图表样式
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('Twisted Truncated Cone (Coronal Hole Model)')
ax.legend()
plt.colorbar(surface, label='Height Z')
plt.show()

关键部分解释

  • 截锥生成:用radius = r0 * (1 + alpha * z_grid)实现半径随高度比例增长,alpha越大,截锥扩张得越快
  • 扭转效果:通过twisted_theta = theta_grid + beta * z_grid让每个高度的角度线性偏移,beta控制扭转速度——比如beta=np.pi的话,每升高1单位高度就扭转180度
  • 扭转可视化:通过固定初始角度的曲线和表面箭头,直观展示(θ,z)方向的扭转趋势,你可以根据需要调整线条数量或箭头密度

你可以直接调整代码里的r0、alpha、beta参数来匹配你日冕孔模型的实际尺度和扭转特征~

内容的提问来源于stack exchange,提问作者K-Q

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:43