|
|
@ -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", |
|
|
|