Skip to main content
 首页 » 编程设计

python之在 Python 中绘制三个轴上的对数螺线

2025年05月04日22soundcode

我尝试在三个轴上绘制 Spring 形式的对数螺线。 使用参数方程:

x=a*exp(b*th)*cos(th) 
y=a*exp(b*th)*sin(th) 

使用代码:

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 
from math import exp,sin,cos 
from pylab import * 
 
mpl.rcParams['legend.fontsize'] = 10 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
n=100 
a=0.5 
b=0.20 
th=np.linspace(0, 500, 10000) 
x=a*exp(b*th)*cos(th) 
y=a*exp(b*th)*sin(th) 
ax.plot(x, y) 
ax.legend() 
 
plt.show() 

我得到:

但是,我想沿 Z 轴 拉伸(stretch)螺旋以获得类似于以下的结果,但使用对数螺旋作为基础:

你怎么做到的?如何通过向 Z 轴 添加条件来修改函数?

请您参考如下方法:

选择哪个 z 有点取决于您。从情节本身很难说,但我猜它是线性的(最简单的选择)。

获取你的代码并添加 z 轴你可以做这样的事情

import matplotlib as mpl 
from mpl_toolkits.mplot3d import Axes3D 
import numpy as np 
import matplotlib.pyplot as plt 
from math import exp,sin,cos 
from pylab import * 
 
mpl.rcParams['legend.fontsize'] = 10 
 
fig = plt.figure() 
ax = fig.gca(projection='3d') 
a=0.05 
b=0.10 
# took the liberty of reducing the max value for th  
# as it was giving you values of the order of e42 
th=np.linspace(0, 50, 10000)   
x=a*exp(b*th)*cos(th) 
y=a*exp(b*th)*sin(th) 
z=np.linspace(0,2, 10000)  # creating the z array with the same length as th 
ax.plot(x, y, z)  # adding z as an argument for the plot 
ax.legend() 
 
plt.show() 

您可以使用a 和b 参数来获得您想要的椭圆形状。您还可以使用 z 的定义,使其呈指数增长或对数增长......或其他完全不同的东西。

顺便说一句,您的导入有点多余,一个包中的某些功能可能被另一个包遮盖了。