Skip to content

Commit 9c9d601

Browse files
committed
Increased granularity, made graph segments, invisible and removed dynamic parts completely
1 parent e62e105 commit 9c9d601

File tree

4 files changed

+10
-29
lines changed

4 files changed

+10
-29
lines changed

Wave.py

+2-6
Original file line numberDiff line numberDiff line change
@@ -27,17 +27,13 @@ def get_omega(self):
2727
def get_y_array_plain(self, time, x_array):
2828
return [self.amplitude * np.sin(self.get_omega() * (time - self.direction * x / self.get_velocity())) for x in x_array]
2929

30-
def get_y_array(self, time, x_array, static_show=[-99999, 99999], dynamic_show=[-99999, 99999], dynamic_offset=0):
30+
def get_y_array(self, time, x_array, static_show=[-99999, 99999]):
3131
y_array = []
3232
velocity = self.get_velocity()
3333
omega = self.get_omega()
3434
for x in x_array:
3535
if x < static_show[0] or x > static_show[1]:
36-
y_array.append(0)
37-
elif (x - self.direction * velocity * time < dynamic_offset + dynamic_show[0]
38-
or x - self.direction * velocity * time > dynamic_offset + dynamic_show[1]) \
39-
and not self.show_full_wave:
40-
y_array.append(0)
36+
y_array.append(np.nan)
4137
else:
4238
y_array.append(self.amplitude * np.sin(omega * (time - self.direction * x / velocity)))
4339
return y_array

WaveGraphBase.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ def __init__(self, name, granularity, x_range, x_offset, y_range, y_offset, time
2121
self.checkbox_data = checkbox_data
2222
self.time_factor = time_factor
2323
self.line_thickness = line_thickness
24-
self.checkboxes_ticked = [True] * len(self.waves)
2524

2625
self.fig = plt.figure(figsize=(16, 9))
2726
self.fig.canvas.set_window_title(name)
@@ -47,6 +46,7 @@ def __init__(self, name, granularity, x_range, x_offset, y_range, y_offset, time
4746
self.checkbox = CheckButtons(self.checkboxAx, tuple(x["name"] for x in self.checkbox_data),
4847
tuple(x["init"] for x in self.checkbox_data))
4948
self.checkbox.on_clicked(self.update)
49+
self.checkboxes_ticked = self.checkbox.get_status()
5050

5151
self.slider_cell = self.control_grid[0, 2:6]
5252
self.slider_grid = gridspec.GridSpecFromSubplotSpec(len(self.slider_data), 1, self.slider_cell)

WaveMediumBoundary.py

+4-18
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,10 @@
2727

2828

2929
class WavesChangingMedium(WaveGraphBase):
30-
def __init__(self, name='Waves medium boundary', granularity=512, x_range=4 * PI, x_offset=0, y_range=6, y_offset=0, time_factor=0.1, line_thickness=5, waves=[], slider_data=[], checkbox_data=[], tension=2, mass_density=0.5):
30+
def __init__(self, name='Waves medium boundary', granularity=2048, x_range=4 * PI, x_offset=0, y_range=6, y_offset=0, time_factor=0.1, line_thickness=5, waves=[], slider_data=[], checkbox_data=[], tension=2, mass_density=0.5):
3131
super().__init__(name, granularity, x_range, x_offset, y_range, y_offset, time_factor, line_thickness, waves, slider_data, checkbox_data)
3232
self.tension = tension
3333
self.mass_density = mass_density
34-
self.checkboxes_ticked = self.checkbox.get_status()
3534

3635
def update(self, event=None):
3736
self.waves[0].amplitude = self.sliders[0].val
@@ -48,22 +47,9 @@ def animate(self, i):
4847
self.waves[1] = self.waves[0].get_reflected_wave(self.tension, self.mass_density)
4948
self.waves[2] = self.waves[0].get_transmitted_wave(self.tension, self.mass_density)
5049

51-
self.y_data[0] = self.waves[0].get_y_array(i * self.time_factor, self.x_data,
52-
static_show=[-self.x_range, 0],
53-
dynamic_show=[0, self.waves[0].get_length() / 2],
54-
dynamic_offset=-(int(self.x_range/self.waves[0].get_length())+1)*
55-
self.waves[0].get_length())
56-
self.y_data[1] = self.waves[1].get_y_array(i * self.time_factor, self.x_data,
57-
static_show=[-self.x_range, 0],
58-
dynamic_show=[-self.waves[1].get_length() / 2, 0],
59-
dynamic_offset=(int(self.x_range/self.waves[1].get_length())+1)*
60-
self.waves[1].get_length())
61-
self.y_data[2] = self.waves[2].get_y_array(i * self.time_factor, self.x_data,
62-
static_show=[0, self.x_range],
63-
dynamic_show=[0, self.waves[2].get_length() / 2],
64-
dynamic_offset=-(int(self.x_range/self.waves[0].get_length())+1)*
65-
self.waves[0].get_length()*
66-
self.waves[0].get_velocity()/self.waves[2].get_velocity())
50+
self.y_data[0] = self.waves[0].get_y_array(i * self.time_factor, self.x_data, static_show=[-self.x_range, 0])
51+
self.y_data[1] = self.waves[1].get_y_array(i * self.time_factor, self.x_data, static_show=[-self.x_range, 0])
52+
self.y_data[2] = self.waves[2].get_y_array(i * self.time_factor, self.x_data, static_show=[(-3*self.x_range-1)/self.granularity, self.x_range])
6753
self.y_data[3] = [x + y for x, y in zip(self.y_data[0], self.y_data[1])]
6854

6955
for j in range(len(self.y_data)):

WaveSuperposition.py

+3-4
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,8 @@
2525

2626

2727
class WaveSuperposition(WaveGraphBase):
28-
def __init__(self, name='Wave superposition', granularity=512, x_range=4 * PI, x_offset=0, y_range=6, y_offset=0, time_factor=0.1, line_thickness=5, waves=[], slider_data=[], checkbox_data=[]):
28+
def __init__(self, name='Wave superposition', granularity=2048, x_range=4 * PI, x_offset=0, y_range=6, y_offset=0, time_factor=0.1, line_thickness=5, waves=[], slider_data=[], checkbox_data=[]):
2929
super().__init__(name, granularity, x_range, x_offset, y_range, y_offset, time_factor, line_thickness, waves, slider_data, checkbox_data)
30-
self.checkboxes_ticked = self.checkbox.get_status()
3130

3231
def update(self, event=None):
3332
self.waves[0].amplitude = self.sliders[0].val
@@ -43,8 +42,8 @@ def update(self, event=None):
4342
self.checkboxes_ticked = self.checkbox.get_status()
4443

4544
def animate(self, i):
46-
self.y_data[0] = self.waves[0].get_y_array(i * self.time_factor, self.x_data, dynamic_show=[-self.x_range - self.waves[0].get_length() / 2, -self.x_range])
47-
self.y_data[1] = self.waves[1].get_y_array(i * self.time_factor, self.x_data, dynamic_show=[self.x_range, self.x_range + self.waves[1].get_length() / 2])
45+
self.y_data[0] = self.waves[0].get_y_array(i * self.time_factor, self.x_data)
46+
self.y_data[1] = self.waves[1].get_y_array(i * self.time_factor, self.x_data)
4847
self.y_data[2] = [x + y for x, y in zip(self.y_data[0], self.y_data[1])]
4948

5049
for j in range(len(self.y_data)):

0 commit comments

Comments
 (0)