Beispiel #1
0
 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()
Beispiel #5
0
    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()
Beispiel #6
0
    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
Beispiel #12
0
  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()
Beispiel #13
0
    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()