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

如何用Python/Julia实现绕x=2r旋转圆生成圆环(Torus)

实现圆绕直线x=2r旋转生成圆环(Torus)

需求说明

将**半径为r的圆(圆心在原点,方程为$x2+y2=r^2$)**绕直线$x=2r$(平行于y轴的竖线)旋转,生成3D圆环结构,优先采用高效的向量化计算方案。


Julia 高效实现方案

利用Julia的向量化运算和Plots库的3D绘图功能,直接通过圆环的参数方程生成坐标,避免循环,性能更优:

using Plots, LaTeXStrings
gr()

# 参数定义
r = 2  # 圆的半径
R = 2r # 旋转轴到圆心的距离(x=2r)

# 生成参数网格:θ是原圆上的角度,φ是旋转角度
θ = range(0, 2π, length=100)
φ = range(0, 2π, length=100)

# 圆环参数方程
x(θ, φ) = R + (r*cos(θ) - R) * cos(φ)
y(θ, φ) = r*sin(θ)
z(θ, φ) = (r*cos(θ) - R) * sin(φ)

# 生成坐标矩阵(向量化计算)
X = x.(θ', φ)
Y = y.(θ', φ)
Z = z.(θ', φ)

# 绘制3D圆环
surface(X, Y, Z, 
        label="圆环 (Torus)",
        color=:viridis, 
        title=L"圆 $x^2+y^2=r^2$ 绕 $x=2r$ 旋转生成的圆环",
        xlabel="X", ylabel="Y", zlabel="Z")

# 可选:绘制原始圆和旋转轴(2D子图)
plot!(plot(r*cos.(θ), r*sin.(θ), 
           label=L"原始圆 $x^2+y^2=r^2$",
           color=:blue,
           xlabel="X", ylabel="Y"),
      plot!([R], seriestype=:vline, color=:green, label=L"旋转轴 $x=2r$"),
      layout=(1,2), size=(1200, 600))

代码说明

  • 参数化方程:通过两个角度参数θ(原圆上点的角度)和φ(旋转角度)推导圆环3D坐标,逻辑清晰且计算高效。
  • 向量化运算:利用Julia广播机制(.运算符)一次性生成所有坐标矩阵,替代逐点循环,大幅提升计算速度。
  • 可视化:同时展示3D圆环与原始2D圆+旋转轴,直观验证旋转效果。

Python 高效实现方案

使用NumPy的向量化计算生成坐标,配合Matplotlib绘制3D圆环:

import numpy as np
import matplotlib.pyplot as plt

# 参数定义
r = 2  # 圆的半径
R = 2 * r  # 旋转轴位置x=2r

# 生成参数网格
theta = np.linspace(0, 2*np.pi, 100)
phi = np.linspace(0, 2*np.pi, 100)
theta, phi = np.meshgrid(theta, phi)

# 圆环参数方程(向量化计算)
X = R + (r * np.cos(theta) - R) * np.cos(phi)
Y = r * np.sin(theta)
Z = (r * np.cos(theta) - R) * np.sin(phi)

# 创建3D绘图
fig = plt.figure(figsize=(12, 6))

# 子图1:3D圆环
ax1 = fig.add_subplot(121, projection='3d')
ax1.plot_surface(X, Y, Z, cmap='viridis', edgecolor='none')
ax1.set_title('圆绕x=2r旋转生成的圆环')
ax1.set_xlabel('X')
ax1.set_ylabel('Y')
ax1.set_zlabel('Z')

# 子图2:原始圆和旋转轴
ax2 = fig.add_subplot(122)
# 绘制原始圆
circle_x = r * np.cos(theta[:,0])
circle_y = r * np.sin(theta[:,0])
ax2.plot(circle_x, circle_y, label=f'原始圆 $x^2+y^2={r}^2$', color='blue')
# 绘制旋转轴
ax2.axvline(x=R, color='green', label=f'旋转轴 x={R}')
ax2.set_title('原始圆与旋转轴')
ax2.set_xlabel('X')
ax2.set_ylabel('Y')
ax2.legend()
ax2.axis('equal')

plt.tight_layout()
plt.show()

代码说明

  • 向量化网格:用np.meshgrid生成参数网格,通过矩阵运算直接计算所有坐标,避免低效循环。
  • 参数方程:与Julia版本逻辑一致,确保坐标计算的准确性和一致性。
  • 可视化优化:设置axis('equal')保证原始圆比例正确,3D图使用edgecolor='none'让圆环显示更平滑。

内容的提问来源于stack exchange,提问作者Freya the Goddess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 11:25:30