如何在python中使用绘制的3D参数函数创建动画

问题描述 投票:0回答:1

我在python中开发了一个程序来绘制以下参数函数:

enter image description here

具有0 <= u,v <= 2pi且r =1。这里的代码

import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
r=1
fig=plt.figure()
ax=fig.gca(projection='3d')
u,v=numpy.mgrid[0:2*numpy.pi:100j,0:2*numpy.pi:100j]
x=(r+numpy.cos(u/2)*numpy.sin(v)-numpy.sin(u/2)*numpy.sin(2*v))*numpy.cos(u)
y=(r+numpy.cos(u/2)*numpy.sin(v)-numpy.sin(u/2)*numpy.sin(2*v))*numpy.sin(u)
z=numpy.sin(u/2)*numpy.sin(v)+numpy.cos(u/2)*numpy.sin(2*v)
ax.plot_wireframe(x,y,z,color='b')
plt.show()

[现在,我想创建一个动画,以使曲面围绕phi = i2 * pi / 360的轴z旋转,其中i = 1,..... 360。我认为我应该使用'matplotlib.animation.funcAnimation'函数,但我不知道如何使用参数函数调用它。

python matplotlib animation 3d
1个回答
0
投票

我解决了定义包含x和y导数的函数并将其传递给属于matplotlib.animation库的函数funcAnimation的问题。遵循更新的代码段代码。

import numpy
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
r=1
fig=plt.figure()
ax=fig.gca(projection='3d')
u,v=numpy.mgrid[0:2*numpy.pi:50j,0:2*numpy.pi:50j]
x=(r+numpy.cos(u/2)*numpy.sin(v)-numpy.sin(u/2)*numpy.sin(2*v))*numpy.cos(u)
y=(r+numpy.cos(u/2)*numpy.sin(v)-numpy.sin(u/2)*numpy.sin(2*v))*numpy.sin(u)
z=numpy.sin(u/2)*numpy.sin(v)+numpy.cos(u/2)*numpy.sin(2*v)
wframe = None
ax.set_xlim3d(-2,2)
ax.set_ylim3d(-2,2)
def fun(i):
    global wframe
    if wframe:
       ax.collections.remove(wframe)
    theta=(i*2*numpy.pi)/360
    x1=x*numpy.cos(theta)-y*numpy.sin(theta)
    y1=x*numpy.sin(theta)+y*numpy.cos(theta)
    wframe= ax.plot_wireframe(x1,y1,z,color='r')
ani = animation.FuncAnimation(fig, fun, 360, interval=1)
plt.show()
© www.soinside.com 2019 - 2024. All rights reserved.