Python 使用matplotlib移动圆

Python 使用matplotlib移动圆,python,matplotlib,Python,Matplotlib,我绕了一个圈,然后在里面又绕了一个圈。我必须在大圆圈内移动小圆圈 我有np数组中θ的所有值。我想让圆围绕Rheta的每个值移动。我不知道如何“动画化”这个圆 def hypotrochoide(R, r): theta = np.linspace(0, 2*np.pi, 100) R= R/2 x = R*np.cos(theta) y = R*np.sin(theta) r= r/2 rTheta= n

我绕了一个圈,然后在里面又绕了一个圈。我必须在大圆圈内移动小圆圈

我有np数组中θ的所有值。我想让圆围绕Rheta的每个值移动。我不知道如何“动画化”这个圆

def hypotrochoide(R, r):
   
   theta = np.linspace(0, 2*np.pi, 100)
   
   R= R/2
   
   
   x = R*np.cos(theta)
   y = R*np.sin(theta)
   
   
   r= r/2
   
   rTheta= np.linspace(0, 2*np.pi, 100)
   
   iCircleX = ((R- r) * np.cos(0)) + r*np.cos(theta)
   iCircleY = ((R- r) * np.sin(0)) + r*np.sin(theta)

   
   

   plt.axis('equal')
   
   
   plt.plot(x,y)
   plt.plot(iCircleX,iCircleY)
   


    
hypotrochoide(10, 4)


plt.show()

这是我使用Pandas和Plotly Express的解决方案,它有一个动画功能:

以下是您需要的软件包:

导入matplotlib.pyplot作为plt
将numpy作为np导入
作为pd进口熊猫
将plotly.tools作为tls导入
导入plotly.graph_objs作为go
绘声绘色地导入
将plotly.figure\u工厂作为ff导入
将plotly.express导入为px
从plotly.subplot导入make_子地块
从plotly.offline导入init_notebook_模式、plot、iplot、下载_plotlyjs
初始笔记本模式(已连接=真)
plotly.offline.init_笔记本_模式(connected=True)
首先,我编写了两个辅助函数:一个用于计算半径为r和圆心(centerX,centerY)的圆的所有点,另一个用于查找外圆和内圆的所有点

#创建函数
def循环点(中心X、中心Y、r):
allTheta=np.linspace(0,2*np.pi,100)
x=r*np.cos(全θ)+centerX
y=r*np.sin(全θ)+centerY
返回x,y
def低Rochoide_计算(R,R,θ):
#求外圆的点
outerX,outerY=圆点(0,0,R)
#求内圆的点
centerInnerX=(R-R)*np.cos(θ)
centerInnerY=(R-R)*np.sin(θ)
innerX,innerY=圆(centerInnerX,centerInnerY,r)
返回outerX、outerY、innerX、innerY
然后我计算0到2pirad之间所有θ的所有点数据(外部和内部x和y),并将其加载到一个数据帧中

#获取数据
步长=100
R=5
r=1
data=np.zero((步长*步长,5))#创建空数组
#创建完整步长^2θ列表(每个重复100次)
allTheta=np.linspace(0,2*np.pi,步长)
fullThetas=[]
对于范围内的i(所有θ形状[0]):
对于范围内的j(步长):
fulltheta.append(allTheta[i])
数据[:,0]=全方位
#对于0到2piθ
对于范围内的i(所有θ形状[0]):
#计算外圆和内圆点
outerX,outerY,innerX,innerY=下旋体_计算(R,R,allTheta[i])
#计算行索引
idxStart=100*i
idxEnd=idxStart+100
#将外部/内部x/y坐标设置为阵列中的正确行
数据[idxStart:idxEnd,1]=outerX
数据[idxStart:idxEnd,2]=outerY
数据[idxStart:idxEnd,3]=innerX
数据[idxStart:idxEnd,4]=innerY
#从阵列中创建数据帧
df=pd.DataFrame(数据)
df.columns=['Theta'、'Outer_X'、'Outer_Y'、'Inner_X'、'Inner_Y']
df
然后,我将该数据帧赋予Plotly Expression函数,并将其指定为跨越所有θ的动画

#创建有情节的动画
图=px.散射(df,x='Inner\ux',y='Inner\uy',动画帧='Theta')
图添加_轨迹(px.散射(df,x='Outer_x',y='Outer_y')。数据[0])
图:更新布局(标题='Hypotrochoide动画',高度=600,宽度=600)
图更新_xaxes(范围=[-6,6])
图更新_yaxes(范围=[-6,6])
这是来自动画的示例帧

要运行动画,可以拖动滑块或单击播放按钮