def timer_1_tick(self, **event_args): if self.first: self.slider1 = draw.slider(self.can_slid, mini=0, maxi=100, stepsize=1, start=4, colour="#c13027") self.slider1.indicator = True self.slider1.draw() self.slider2 = draw.slider(self.can_slid_2, mini=-10, maxi=10, stepsize=0.1, start=0) self.slider2.maxmin = True self.slider2.draw() self.slider3 = draw.slider(self.can_slid_3, mini=0, maxi=50, stepsize=0.5, start=5, colour="#33b138") self.slider3.indicator = True self.slider3.draw() self.first = False
def timer_tick(self, **event_args): # This method is called Every [interval] seconds self.cw = self.canvas.get_width() self.ch = self.canvas.get_height() ch = self.ch canvas = self.canvas if self.first: self.slid_N = draw.slider(self.can_N, 3, 30, stepsize=1, start=4) self.slid_v = draw.slider(self.can_v, 0, 1, stepsize=0.01, start=0.01) self.slid_L = draw.slider(self.can_L, 0.01, 1, stepsize=0.01, start=0.1) self.L = self.slid_L.value self.v = self.slid_v.value self.N = self.slid_N.value self.param_boxes += [self.slid_N, self.slid_L, self.slid_v] self.a = 2 * math.pi / self.N self.first = False L = self.L v = self.v self.a = 2 * math.pi / self.N a = self.a #distance from centre to middle of one side self.d = float(L) * math.sqrt( (1 + math.cos(a)) / (1 - math.cos(a))) / 2 d = self.d self.xu = self.give_xu(self.ch, self.d) xu = self.xu #if self.reset: self.initial(canvas) draw.reset2(canvas, self.xu) self.draw_path(canvas, self.path) if self.running: self.move_bug(self.bug) #self.draw_bugs(canvas, self.bug.pos, "#2a2ac7") draw.reset2(canvas, xu) if self.bug.pos.mag() <= self.bugradius: self.running = False self.btn_run.text = "Run" #self.initial(canvas) # if -0.1 <= self.xu - self.newxu <= 0.1: # self.zoom = False # if self.zoom: # self.xu += self.step self.counter += 1
def timer_tick (self, **event_args): # This method is called Every [interval] seconds self.cw = self.canvas.get_width() self.ch =self.canvas.get_height() ch = self.ch canvas = self.canvas if self.first: self.slid_N = draw.slider(self.can_N, 3, 30, stepsize = 1, start = 4) self.slid_v = draw.slider(self.can_v, 0, 1, stepsize = 0.01, start = 0.01) self.slid_L = draw.slider(self.can_L, 0.01, 1, stepsize = 0.01, start = 0.1) self.L = self.slid_L.value self.v =self.slid_v.value self.N =self.slid_N.value self.param_boxes += [self.slid_N, self.slid_L, self.slid_v] self.a = 2*math.pi/self.N self.first = False L = self.L v = self.v self.a = 2*math.pi/self.N a = self.a #distance from centre to middle of one side self.d = float(L)*math.sqrt((1+math.cos(a))/(1-math.cos(a)))/2 d = self.d self.xu =self.give_xu(self.ch, self.d) xu = self.xu #if self.reset: self.initial(canvas) draw.reset2(canvas, self.xu) self.draw_path(canvas, self.path) if self.running: self.move_bug(self.bug) #self.draw_bugs(canvas, self.bug.pos, "#2a2ac7") draw.reset2(canvas, xu) if self.bug.pos.mag() <= self.bugradius: self.running = False self.btn_run.text = "Run" #self.initial(canvas) # if -0.1 <= self.xu - self.newxu <= 0.1: # self.zoom = False # if self.zoom: # self.xu += self.step if self.counter %5 == 0: self.slid_N.draw() self.slid_v.draw() self.slid_L.draw() self.counter += 1
def timer_tick(self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.xu = float(self.cw) / self.W self.wav_slider = draw.slider(self.can_slid, mini=400, maxi=700, stepsize=1, start=510) self.wav_slider.maxmin = True self.wav = self.wav_slider.value * 1e-9 self.wav_slider.draw() self.draw_all() self.first = False self.change() self.slits.N_slider.draw() self.slits.d_slider.draw() self.single.a_slider.draw() self.grating.n_slider.draw()
def timer_tick(self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.slid_wav = draw.slider(self.can_slid, 0.001, 0.1, stepsize=0.001, start=0.01) self.xu = self.cw self.initalize() self.init_pos(self.points) self.draw_all() self.first = False if self.running: for point in self.points: point.move(dt) point.radiate(dt) self.draw_all() self.slid_wav.draw()
def timer_tick(self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt old = self.old self.grid_custom.visible = self.custom.selected if self.first: self.xu = cw / 10.0 self.initialize() self.init_pos() self.slider1 = draw.slider(self.can_slid, mini=0.1, maxi=4, stepsize=0.1, start=1) self.slider1.maxmin = True self.slider1.draw() self.param_boxes.append(self.slider1) self.first = False self.draw_all() ball = self.ball if self.running: #dtt = dt/30 # for i in range(30): # ball.vel += dtt*(self.E + ball.vel.cross(self.B))*ball.charge/ball.mass # ball.move(dt) ball.vel = physics.runge_kutta4(ball.vel, self.accel, self.t, dt) ball.move(dt) if int(self.t / self.dt) % 6 == 0: self.cur_path.append(self.ball.pos) self.trail.append(self.ball.pos) if len(self.trail) > self.trail_buffer: self.trail = self.trail[1:] self.t += dt self.draw_all() new = self.slider1.value if new != old: scale = self.slider1.value #self.oldxu = 1.0*self.xu self.xu = self.cw / 10.0 * scale # self.xu += (self.newxu-self.oldxu)/20 #self.init_pos() # if -0.05 <=(self.xu - self.newxu) <= 0.05: # self.zoom = False self.draw_all() self.slider1.draw() old = new * 1
def timer_tick (self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt old = self.old self.grid_custom.visible = self.custom.selected if self.first: self.xu = cw/10.0 self.initialize() self.init_pos() self.slider1 = draw.slider(self.can_slid, mini= 0.1, maxi = 4, stepsize = 0.1, start=1) self.slider1.maxmin = True self.slider1.draw() self.param_boxes.append(self.slider1) self.first = False self.draw_all() ball = self.ball if self.running: #dtt = dt/30 # for i in range(30): # ball.vel += dtt*(self.E + ball.vel.cross(self.B))*ball.charge/ball.mass # ball.move(dt) ball.vel = physics.runge_kutta4(ball.vel, self.accel, self.t, dt) ball.move(dt) if int(self.t/self.dt) %6 ==0: self.cur_path.append(self.ball.pos) self.trail.append(self.ball.pos) if len(self.trail)>self.trail_buffer: self.trail = self.trail[1:] self.t += dt self.draw_all() new = self.slider1.value if new != old: scale = self.slider1.value #self.oldxu = 1.0*self.xu self.xu = self.cw/10.0*scale # self.xu += (self.newxu-self.oldxu)/20 #self.init_pos() # if -0.05 <=(self.xu - self.newxu) <= 0.05: # self.zoom = False self.draw_all() old = new*1
def timer_tick (self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.xu = float(self.cw)/self.W self.wav_slider = draw.slider(self.can_slid, mini= 400, maxi = 700, stepsize = 1, start=510) self.wav_slider.maxmin = True self.wav = self.wav_slider.value*1e-9 self.wav_slider.draw() self.draw_all() self.first = False self.change()
def timer_tick(self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.xu = self.cw self.initalize() self.init_pos(self.points) self.spd_slider = draw.slider(self.can_slid, mini=0.1, maxi=3, stepsize=0.1, start=0.6, colour=self.default_colour_wave) self.spd_slider.indicator = True for point in self.points: point.vel.x = self.spd_slider.value * 0.1 self.spd_slider.draw() self.draw_all() self.first = False if self.running: for point in self.points: point.move(dt) gap = int(float(self.wav) / (self.spd * dt)) #point.radiate(dt) if int(float(self.t) / dt) % gap == 0: new = physics.point_source(radius=0.0001, speed=self.spd, wavelength=self.wav) new.pos = point.pos * 1 self.pulses.append(new) for point in self.pulses: point.radiate(dt) self.draw_all() self.t += self.dt
def timer_tick (self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.slid_wav = draw.slider(self.can_slid, 0.001, 0.1, stepsize = 0.001, start = 0.01) self.xu = self.cw self.initalize() self.init_pos(self.points) self.draw_all() self.first = False if self.running: for point in self.points: point.move(dt) point.radiate(dt) self.draw_all()
def timer_tick (self, **event_args): canvas = self.canvas self.cw = canvas.get_width() self.ch = canvas.get_height() cw = self.cw ch = self.ch dt = self.dt if self.first: self.xu = self.cw self.initalize() self.init_pos(self.points) self.spd_slider = draw.slider(self.can_slid, mini= 0.1, maxi = 3, stepsize = 0.1, start=0.6, colour = self.default_colour_wave) self.spd_slider.indicator = True for point in self.points: point.vel.x = self.spd_slider.value*0.1 self.spd_slider.draw() self.draw_all() self.first = False if self.running: for point in self.points: point.move(dt) gap = int(float(self.wav)/(self.spd*dt)) #point.radiate(dt) if int(float(self.t)/dt) % gap ==0: new = physics.point_source(radius = 0.0001, speed= self.spd, wavelength = self.wav) new.pos = point.pos*1 self.pulses.append(new) for point in self.pulses: point.radiate(dt) self.draw_all() self.t += self.dt
def timer_1_tick (self, **event_args): # This method is called Every [interval] seconds self.dt = self.timer_1.interval dt = self.dt self.cw = self.can_lab.get_width() self.ch = self.can_lab.get_height() #initalize balls at first iteration if self.first: #pixels per m, based on large ball diameter, canvas 10 ball widths self.xu = self.cw/(self.bigrad*2*10) self.balls = [] for i in range(0,4): x = physics.ball(1, self.bigrad) self.balls.append(x) self.slider1 = draw.slider(self.can_slid, mini= 0.1, maxi = 4, stepsize = 0.1, start=1) self.slider1.indicator = True self.slider1.draw() self.param_boxes.append(self.slider1) self.init_balls() self.init_balls_pos() self.first = False self.xu = self.cw/(self.bigrad*2*10)*self.slider1.value #draw everything self.draw_all() if self.reset: self.init_balls() if self.running: for ball in self.balls: ball.move(dt) self.check(self.balls[0], self.balls[1], True) self.check(self.balls[2], self.balls[3], False) KElab = 0.5 *(self.balls[0].mass*self.balls[0].vel.mag()**2 + self.balls[1].mass*self.balls[1].vel.mag()**2) MOlab = self.balls[0].momentum() + self.balls[1].momentum() KEzmf = 0.5 *(self.balls[2].mass*self.balls[2].vel.mag()**2 + self.balls[3].mass*self.balls[3].vel.mag()**2) MOzmf = self.balls[2].momentum() + self.balls[3].momentum() zmfvel = self.balls[0].zmf_vel(self.balls[1]) self.lbl_kelab.text = "Total KE = {0}J".format(repr(round(KElab, 3))) self.lbl_kezmf.text = "Total KE = {0}J".format(repr(round(KEzmf, 3))) self.lbl_molab.text = "Total Momentum = ({0}, {1}) kgms-1".format(repr(round(MOlab.x, 3)), repr(round(MOlab.y, 3))) self.lbl_mozmf.text = "Total Momentum = ({0}, {1}) kgms^-1".format(repr(round(MOzmf.x, 3)), repr(round(MOzmf.y, 3))) self.lbl_zmfvel.text = "v = ({0}, {1}) ms^-1".format(repr(round(zmfvel.x, 3)), repr(round(zmfvel.y, 3))) self.lbl_box.text = "(Box: {0}m x {1}m)".format(repr(round(self.cw/self.xu, 3)), repr(round(self.ch/self.xu, 3))) self.lbl_vx_1.text = repr(round(self.balls[0].vel.x,3)) self.lbl_vy_1.text = repr(round(self.balls[0].vel.y,3)) self.lbl_vx_2.text = repr(round(self.balls[1].vel.x,3)) self.lbl_vy_2.text = repr(round(self.balls[1].vel.y,3)) if self.zoom: self.xu += (self.newxu-self.oldxu)/20 self.init_balls_pos() if -0.05 <=(self.xu - self.newxu) <= 0.05: self.zoom = False self.slider1.draw()
def timer_1_tick(self, **event_args): # This method is called Every [interval] seconds self.dt = self.timer_1.interval dt = self.dt self.cw = self.can_lab.get_width() self.ch = self.can_lab.get_height() #initalize balls at first iteration if self.first: #pixels per m, based on large ball diameter, canvas 10 ball widths self.xu = self.cw / (self.bigrad * 2 * 10) self.balls = [] for i in range(0, 4): x = physics.ball(1, self.bigrad) self.balls.append(x) self.slider1 = draw.slider(self.can_slid, mini=0.1, maxi=4, stepsize=0.1, start=1) self.slider1.indicator = True self.slider1.draw() self.param_boxes.append(self.slider1) self.init_balls() self.init_balls_pos() self.first = False self.xu = self.cw / (self.bigrad * 2 * 10) * self.slider1.value #draw everything self.draw_all() if self.reset: self.init_balls() if self.running: for ball in self.balls: ball.move(dt) self.check(self.balls[0], self.balls[1], True) self.check(self.balls[2], self.balls[3], False) KElab = 0.5 * (self.balls[0].mass * self.balls[0].vel.mag()**2 + self.balls[1].mass * self.balls[1].vel.mag()**2) MOlab = self.balls[0].momentum() + self.balls[1].momentum() KEzmf = 0.5 * (self.balls[2].mass * self.balls[2].vel.mag()**2 + self.balls[3].mass * self.balls[3].vel.mag()**2) MOzmf = self.balls[2].momentum() + self.balls[3].momentum() zmfvel = self.balls[0].zmf_vel(self.balls[1]) self.lbl_kelab.text = "Total KE = {0}J".format(repr(round(KElab, 3))) self.lbl_kezmf.text = "Total KE = {0}J".format(repr(round(KEzmf, 3))) self.lbl_molab.text = "Total Momentum = ({0}, {1}) kgms-1".format( repr(round(MOlab.x, 3)), repr(round(MOlab.y, 3))) self.lbl_mozmf.text = "Total Momentum = ({0}, {1}) kgms^-1".format( repr(round(MOzmf.x, 3)), repr(round(MOzmf.y, 3))) self.lbl_zmfvel.text = "v = ({0}, {1}) ms^-1".format( repr(round(zmfvel.x, 3)), repr(round(zmfvel.y, 3))) self.lbl_box.text = "(Box: {0}m x {1}m)".format( repr(round(self.cw / self.xu, 3)), repr(round(self.ch / self.xu, 3))) self.lbl_vx_1.text = repr(round(self.balls[0].vel.x, 3)) self.lbl_vy_1.text = repr(round(self.balls[0].vel.y, 3)) self.lbl_vx_2.text = repr(round(self.balls[1].vel.x, 3)) self.lbl_vy_2.text = repr(round(self.balls[1].vel.y, 3)) if self.zoom: self.xu += (self.newxu - self.oldxu) / 20 self.init_balls_pos() if -0.05 <= (self.xu - self.newxu) <= 0.05: self.zoom = False self.slider1.draw()