Ajout de la représentation 3D

This commit is contained in:
2022-07-27 18:16:13 +02:00
parent a156905d25
commit df79768e96

View File

@@ -6,6 +6,7 @@ import matplotlib.pyplot as plt
from matplotlib.widgets import Slider, Button, CheckButtons from matplotlib.widgets import Slider, Button, CheckButtons
from matplotlib.axes import Axes from matplotlib.axes import Axes
from matplotlib.projections.polar import PolarAxes from matplotlib.projections.polar import PolarAxes
from mpl_toolkits.mplot3d.axes3d import Axes3D
PI = np.pi PI = np.pi
@@ -205,6 +206,65 @@ class TriPlot_VectAxe(PolarAxes):
return return
class TriPlot_3DAxe(Axes3D):
"""Classe d'axe 3D"""
phase = 2*PI/3*np.array([0, 1, 2])
phasor = np.linspace(0-phase, 2*PI-phase, N_PTS).T
theta = phasor[0,:]
def __init__(self, v_max, phi, fig, rect, *args, **kwargs):
Axes3D.__init__(self, fig, rect, auto_add_to_figure=False,
*args, **kwargs)
self.plot_list = []
self.arrow_list = []
self.v_max = v_max
self.phi = phi
self.v_re = np.zeros(self.phasor.shape)
self.v_im = np.zeros(self.phasor.shape)
return
def setup(self):
self.get_figure().add_axes(self)
for i in range(3):
self.plot_list.append(
self.plot(self.v_re[i,:], self.v_im[i,:],
self.theta
)[0]
)
self.set_xlim([-1.6*self.v_max, 1.6*self.v_max])
self.set_ylim([-1.6*self.v_max, 1.6*self.v_max])
self.view_init(vertical_axis='y')
self.set_zlim([0, 2*PI])
self.set_zticks([i*PI/6 for i in range(13)])
self.set_zticklabels([str(30*i)+"°" for i in range(13)])
self.set_box_aspect((4,1,1))
self.set_facecolor("#00000000")
return
def set_vmax(self, v_max):
self.v_max = v_max
self.v_re = self.v_max*np.cos(self.phasor)
self.v_im = self.v_max*np.sin(self.phasor)
return
def set_phi(self, phi):
self.phi = phi
return
def set_parameters(self, p):
return
def refresh(self):
for i, plot in enumerate(self.plot_list):
plot.set_data_3d(
self.v_re[i,:],
self.v_im[i,:],
self.theta
)
return
class TriPlot: class TriPlot:
"""Classe de graphique MLI""" """Classe de graphique MLI"""
@@ -222,10 +282,12 @@ class TriPlot:
# Attributs graphiques # Attributs graphiques
self.fig = plt.figure() self.fig = plt.figure()
self.timeaxe = TriPlot_TimeAxe(self.v_max, self.phi, self.timeaxe = TriPlot_TimeAxe(self.v_max, self.phi,
self.fig, [0.1, 0.2, 0.4, 0.6]) self.fig, [0.1, 0.5, 0.4, 0.4])
self.vectaxe = TriPlot_VectAxe(self.v_max, self.phi, self.vectaxe = TriPlot_VectAxe(self.v_max, self.phi,
self.fig, [0.5, 0.2, 0.5, 0.6]) self.fig, [0.5, 0.2, 0.5, 0.6])
self.axes = [self.timeaxe, self.vectaxe] self.axe3D = TriPlot_3DAxe(self.v_max, self.phi,
self.fig, [0.1, -0.15, 0.4, 0.8])
self.axes = [self.vectaxe, self.timeaxe, self.axe3D]
self.amp_slider = Slider( self.amp_slider = Slider(
ax=plt.axes([0.01, 0.1, 0.03, 0.8]), ax=plt.axes([0.01, 0.1, 0.03, 0.8]),
label="Tension\nefficace", label="Tension\nefficace",