在Frame python中对3D图形进行动画处理

时间:2020-05-16 06:59:25

标签: python graph frame

我想在带有tkinter的Frame中显示一个实时2动画图3D。

我看到了类似的问题3D animation using matplotlib,但是它不起作用-出现一个空窗口(框架),没有显示图形

(我知道打包和网格存在问题-必须使用一个或另一个)

这是我的画框:

from tkinter import Canvas,Button,GROOVE,Tk

fenetre = Tk()                             # Instancier la fenêtre
fenetre.title("Simulation Gaz parfait")  # Ajouter un titre à la fenêtre

zone_titre=Canvas(fenetre,width=400,height=50)
zone_titre.grid(column=0,row=0,columnspan=2)
titre = zone_titre.create_text((70, 30), text="Simulation Gaz parfait")

particules=Canvas(fenetre,width=400,height=400,borderwidth=2,relief=GROOVE,background='white')
particules.grid(column=1,row=1)

pression=Canvas(fenetre,width=400,height=400,borderwidth=2,relief=GROOVE,background='white')
pression.grid(column=2,row=1)

zone_bouton=Canvas(fenetre,width=800,height=60)
zone_bouton.grid(column=0,row=3,columnspan=2,pady=(10))

Button(zone_bouton, text='Réinitialiser', width=10,height=2,background='grey').grid(column=1,row=1)
Button(zone_bouton, text='Quitter', width=10,height=2,background='grey',command=fenetre.destroy).grid(column=2,row=1)
#canvas.pack()

fenetre.mainloop()

和2个图

import numpy as np
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation


c_cube   = input("Donnez le côté de l'enceinte :")
n_part   = input("Donnez le nombre de particules :")
dt       = input("Donnez l'intervale de temps δt de déplacement :")
module_v = input("Donnez la vitesse initiale (module) :")
m_part   = input("Donnez la masse des particules :")


x = np.random.uniform(0,int(c_cube),int(n_part))
y = np.random.uniform(0,int(c_cube),int(n_part))
z = np.random.uniform(0,int(c_cube),int(n_part))

teta    = np.random.uniform(0,2*np.pi,int(n_part))
sin_teta= np.sin(teta)
cos_teta= np.cos(teta)
phi     = np.random.uniform(0,2*np.pi,int(n_part))
sin_phi = np.sin(phi)
cos_phi = np.cos(phi)

vx = int(module_v)*sin_teta*cos_phi
vy = int(module_v)*sin_teta*sin_phi
vz = int(module_v)*cos_teta

dx = vx*float(dt)
dy = vy*float(dt)
dz = vz*float(dt)
fig1= plt.Figure(figsize=(5, 3), dpi=112)

ax1 = fig1.add_subplot(111, projection='3d')

ax1.axes.xaxis.set_ticks([])
ax1.axes.yaxis.set_ticks([])
ax1.axes.zaxis.set_ticks([])
ax1.scatter(x, y, z, c='r', depthshade=False, marker='o')

fig2= plt.Figure(figsize=(3, 2), dpi=112)
fig2.set_facecolor('gray')
ax2 = fig2.add_subplot(111)

ax2.scatter(x, y, c='r', marker='o')

ax2.axes.xaxis.set_ticks([])
ax2.axes.yaxis.set_ticks([])
ax2.set_xlabel('temps')
ax2.set_ylabel('pression')

有什么主意吗? 谢谢

0 个答案:

没有答案