Exemplo n.º 1
0
    def btn_submit_click(self, **event_args):
        if len(self.newvalues) > 0:
            draw.clear_canvas(self.canvas, "#fff")

            if self.check_blur.checked:
                self.newvalues = self.gauss_blur(self.newvalues)

            mark = self.check() * 100
            self.lbl_mark.text = str(repr(mark)) + "%"
            colour = "#198dbf"
            if mark > self.pass_mark:
                self.lbl_mark.text += "\nWell done!"
            else:
                colour = "#fff"
                self.lbl_mark.text += "\nScore  over {0}% to pass".format(
                    self.pass_mark)
            self.graph.plot(xmarker=self.graph.xmarker / self.graph.xu,
                            ymarker=self.graph.ymarker / self.graph.yu,
                            colour=colour)

            self.graph2 = draw.graph_plot(self.canvas, self.newvalues)
            self.graph2.axes_enabled = False
            self.graph2.xlabel = self.xlabel
            self.graph2.ylabel = self.ylabel
            self.graph2.xrange = self.graph.xrange
            self.graph2.yrange = self.graph.yrange
            self.graph2.plot(colour="rgb(214, 106, 72)",
                             xmarker=self.graph.xmarker / self.graph.xu,
                             ymarker=self.graph.ymarker / self.graph.yu)
    def timer_tick (self, **event_args):
        # This method is called Every [interval] seconds
        dt = self.dt
        canvas = self.canvas
        self.cw  = canvas.get_width()
        self.ch = canvas.get_height()
        cw= self.cw
        ch = self.ch
        xu = self.xu

        draw.clear_canvas(canvas, "#fff")
        if self.running:
            angmom = self.earth.radius**2*self.earth.ang_vel+self.moon.orbit**2*self.moon.ang_vel
            self.earth.move(self.dt)
            self.marker.move(self.dt)
            self.moon.move(self.dt)
            self.tides.move(self.dt)
            veldif = (self.earth.ang_vel - self.moon.ang_vel)
            self.moon.orbit += veldif*self.ladj*math.pow(self.moon.orbit, 1.5)*dt
            self.moon.ang_vel = (angmom- self.earth.radius**2*self.earth.ang_vel)/(self.moon.orbit**2)
            self.earth.ang_vel = (angmom - self.moon.orbit**2*self.moon.ang_vel)/(self.earth.radius**2)
            self.tides.ang_vel = self.moon.ang_vel


        if self.moon.orbit - self.moon.radius <= self.earth.radius or self.moon.orbit > math.sqrt((cw/xu)**2 + (ch/xu)**2)/2:
            self.running = False
            self.btn_run.text = "Run"

        self.draw_all()
Exemplo n.º 3
0
 def btn_clear_click(self, **event_args):
     draw.reset2(self.canvas, 1)
     draw.clear_canvas(self.canvas, "#fff")
     self.graph.plot(xmarker=self.graph.xmarker / self.graph.xu,
                     ymarker=self.graph.ymarker / self.graph.yu,
                     colour="#fff")
     self.newvalues = []
    def draw_all(self):
        canvas = self.canvas
        self.cw = canvas.get_width()
        self.ch = canvas.get_height()
        cw = self.cw
        ch = self.ch
        xu = self.xu
        ball = self.ball

        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#fff")

        canvas.fill_style = "#000"
        canvas.fill_rect(0, 0, cw, self.floor_height)

        draw.circle(canvas, ball.radius, ball.pos.x, ball.pos.y)
        canvas.fill_style = "#3683f3"
        canvas.fill()

        #arrow
        if not self.running:
            ball = self.ball
            #velocity vector
            canvas.translate(ball.pos.x, ball.pos.y)
            canvas.rotate(ball.vel.phi())
            draw.arrow(canvas,
                       ball.vel.mag() * self.arrow_scale, 4 * self.linewidth)
            canvas.fill_style = "#49902a"
            canvas.fill()
            draw.reset2(canvas, xu)

        #dashes
        if not self.running:
            draw.paths(canvas, self.paths, self.linewidth, "#000")
Exemplo n.º 5
0
    def draw_all(self):
        canvas = self.canvas
        cw = self.cw
        ch = self.ch
        xu = self.xu
        ball = self.ball

        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#7ec0ee")

        #floor
        canvas.fill_style = "#1f8107"
        canvas.fill_rect(0, 0, cw / self.xu, self.floor_height)

        #pole
        canvas.fill_style = "rgb(111, 62, 55)"
        canvas.fill_rect(self.L + self.ball.radius, self.floor_height, self.D,
                         3)
        canvas.translate(self.L + self.ball.radius - 0.05,
                         3 + self.floor_height)
        canvas.rotate(-math.pi / 2)
        draw.polygon(canvas, 3, self.D * 6)
        canvas.fill_style = "rgb(227, 81, 61)"
        canvas.fill()

        draw.reset2(canvas, xu)

        #ball
        draw.circle(canvas, ball.radius, ball.pos.x, ball.pos.y)
        canvas.fill_style = "#fff"
        canvas.fill()

        #arrow
        if not self.running:
            ball = self.ball
            #velocity vector
            canvas.translate(ball.pos.x, ball.pos.y)
            if ball.vel.y > 0:
                canvas.rotate(ball.vel.phi())
            else:
                canvas.rotate(-ball.vel.phi())
            draw.arrow(canvas,
                       ball.vel.mag() * self.arrow_scale, 4 * self.line_width)
            canvas.fill_style = "#49902a"
            canvas.fill()
            draw.reset2(canvas, xu)

        #dashes
        canvas.begin_path()
        if not self.running:
            for path in self.paths:
                if len(path) > 2:
                    for i in range(len(path) - 1):
                        canvas.move_to(path[i].x, path[i].y)
                        diff = path[i + 1] - path[i]
                        new = path[i] + diff * 0.8
                        canvas.line_to(new.x, new.y)

            canvas.line_width = self.line_width
            canvas.stroke()
Exemplo n.º 6
0
 def cleanup(self):
     """Cleanup the GUI (restore default state)."""
     GD.debug('GUI cleanup')
     self.drawlock.release()
     GD.canvas.cancel_selection()
     draw.clear_canvas()
     self.setBusy(False)
Exemplo n.º 7
0
    def draw_frame(self, canvas, balls):
        #draws border, arrows and balls on to canvas
        cw = self.cw
        ch = self.ch
        xu = self.xu

        #reset canvas
        draw.reset2(canvas, xu)

        #clear canvas
        draw.clear_canvas(canvas, "#fff")

        #balls
        for i in range(0, 2):
            if i % 2 == 0:
                canvas.fill_style = "#4c7fbe"
            else:
                canvas.fill_style = "#bb2828"
            draw.circle(canvas, balls[i].radius, balls[i].pos.x,
                        balls[i].pos.y)
            canvas.fill()

        #borders
        canvas.stroke_style = "#000"
        canvas.line_width = self.border / xu
        canvas.stroke_rect(0, 0, cw / (1.0 * xu), ch / (1.0 * xu))

        #arrows
        if not self.running and self.check_vel.checked:
            for ball in balls:
                draw.vel_arrows(canvas, ball, self.linewidth, self.arrow_scale)

                draw.reset2(canvas, xu)
Exemplo n.º 8
0
  def draw_frame(self, canvas, balls):
    #draws border, arrows and balls on to canvas
    cw = self.cw
    ch = self.ch
    xu= self.xu

    #reset canvas
    draw.reset2(canvas,xu)

    #clear canvas
    draw.clear_canvas(canvas, "#fff")

    #balls
    for i in range(0,2):
        if i%2 == 0:
            canvas.fill_style = "#4c7fbe"
        else:
            canvas.fill_style ="#bb2828"
        draw.circle(canvas, balls[i].radius,balls[i].pos.x, balls[i].pos.y)
        canvas.fill()

    #borders
    canvas.stroke_style = "#000"
    canvas.line_width  = self.border/xu
    canvas.stroke_rect(0,0, cw/(1.0*xu),ch/(1.0*xu))


    #arrows
    if not self.running and self.check_vel.checked:
        for ball in balls:
            draw.vel_arrows(canvas, ball, self.linewidth, self.arrow_scale)

            draw.reset2(canvas, xu)
Exemplo n.º 9
0
 def initial(self, canvas):
     draw.reset2(canvas, self.xu)
     draw.clear_canvas(canvas, "#fff")
     self.draw_polygon(canvas, self.N, self.L)
     self.bug.pos = physics.vector3(-self.L/2, self.d, 0)
     draw.reset2(canvas, self.xu)
     self.draw_bugs(canvas, self.bug.pos, "#2a2ac7")
     draw.reset2(canvas, self.xu)
Exemplo n.º 10
0
 def initial(self, canvas):
     draw.reset2(canvas, self.xu)
     draw.clear_canvas(canvas, "#fff")
     self.draw_polygon(canvas, self.N, self.L)
     self.bug.pos = physics.vector3(-self.L / 2, self.d, 0)
     draw.reset2(canvas, self.xu)
     self.draw_bugs(canvas, self.bug.pos, "#2a2ac7")
     draw.reset2(canvas, self.xu)
Exemplo n.º 11
0
    def btn_submit_click(self, **event_args):
        self.grid_stat.clear()
        self.grid_x_int.clear()
        self.grid_y_int.clear()
        self.lbl_mark.background = "#fff"

        if len(self.all) > 0:
            draw.clear_canvas(self.canvas, "#fff")


            self.newvalues = self.gauss_blur(self.all)

            mark = self.check()*100
            #self.lbl_mark.text = str(repr(mark)) + "%"


            # colour = "#198dbf"
            # if mark >self.pass_mark:
            #     self.lbl_mark.text += "\nWell done!"
            # else:
            #     colour = "#fff"
            #     self.lbl_mark.text += "\nScore  over {0}% to pass".format(self.pass_mark)

            #self.graph.plot()

            self.graph2 = draw.graph_plot(self.canvas, self.newvalues)
            self.graph2.axes_enabled = True
            self.graph2.markers_enabled = False
            self.graph2.xlabel = self.xlabel
            self.graph2.ylabel = self.ylabel
            self.graph2.xrange = self.graph.xrange
            self.graph2.yrange = self.graph.yrange
            self.graph2.plot(colour = "rgb(214, 106, 72)", xmarker = self.xmarker, ymarker = self.ymarker)


            # diffd = self.gauss_blur([diffd],10)
            # self.graph3 = draw.graph_plot(self.canvas, diffd)
            # self.graph3.axes_enabled = False
            # self.graph3.xlabel = self.graph2.xlabel
            # self.graph3.ylabel = self.graph2.ylabel
            # self.graph3.xrange = self.graph2.xrange
            # self.graph3.yrange = self.graph2.yrange
            # #self.graph3.plot()
            #
            # diffd2 = physics.diff_5(diffd)
            # diffd2 = self.gauss_blur([diffd2],10)
            # self.graph4 = draw.graph_plot(self.canvas, diffd2)
            # self.graph4.axes_enabled = False
            # self.graph4.xlabel = self.graph2.xlabel
            # self.graph4.ylabel = self.graph2.ylabel
            # self.graph4.xrange = self.graph2.xrange
            # self.graph4.yrange = self.graph2.yrange
            #self.graph4.plot(colour = "rgb(52, 195, 96)")

            self.graph2.circle_points(zip(self.test_x_ints, [0]*len(self.test_x_ints)), "#336888")
            self.graph2.circle_points(zip([0]*len(self.test_y_ints), self.test_y_ints), "#D69648", pointoffset = len(self.test_x_ints))
            self.graph2.circle_points(self.teststats, "#339664", pointoffset = len(self.test_x_ints) + len(self.test_y_ints))
Exemplo n.º 12
0
    def draw_all(self):
        canvas = self.canvas
        cw= self.cw
        ch = self.ch
        xu = self.xu
        ball= self.ball

        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#7ec0ee")

        #floor
        canvas.fill_style = "#1f8107"
        canvas.fill_rect(0, 0,cw/self.xu , self.floor_height)

        #pole
        canvas.fill_style =  "rgb(111, 62, 55)"
        canvas.fill_rect(self.L+self.ball.radius, self.floor_height, self.D, 3)
        canvas.translate(self.L+self.ball.radius-0.05, 3+self.floor_height)
        canvas.rotate(-math.pi/2)
        draw.polygon(canvas,3, self.D*6)
        canvas.fill_style =  "rgb(227, 81, 61)"
        canvas.fill()

        draw.reset2(canvas, xu)

        #ball
        draw.circle(canvas, ball.radius, ball.pos.x, ball.pos.y)
        canvas.fill_style= "#fff"
        canvas.fill()

        #arrow
        if not self.running:
            ball = self.ball
            #velocity vector
            canvas.translate(ball.pos.x, ball.pos.y)
            if ball.vel.y>0:
                canvas.rotate(ball.vel.phi())
            else:
                canvas.rotate(-ball.vel.phi())
            draw.arrow(canvas, ball.vel.mag()*self.arrow_scale, 4*self.line_width)
            canvas.fill_style = "#49902a"
            canvas.fill()
            draw.reset2(canvas, xu)

        #dashes
        canvas.begin_path()
        if not self.running:
            for path in self.paths:
                if len(path)>2:
                    for i in range(len(path)-1):
                        canvas.move_to(path[i].x, path[i].y)
                        diff = path[i+1] - path[i]
                        new  = path[i] + diff*0.8
                        canvas.line_to(new.x, new.y)

            canvas.line_width = self.line_width
            canvas.stroke()
Exemplo n.º 13
0
    def draw_frame(self, canvas, balls):
        #draws border, arrows and balls on to canvas
        cw = self.cw
        ch = self.ch
        xu = self.xu

        #reset canvas
        draw.reset2(canvas, xu)

        #clear canvas
        draw.clear_canvas(canvas, "#fff")

        #balls
        for i in range(0, 2):
            if i % 2 == 0:
                canvas.fill_style = "#4c7fbe"
            else:
                canvas.fill_style = "#bb2828"
            draw.circle(canvas, balls[i].radius, balls[i].pos.x,
                        balls[i].pos.y)
            canvas.fill()

        #borders
        canvas.stroke_style = "#000"
        canvas.line_width = self.border / xu
        canvas.stroke_rect(0, 0, cw / (1.0 * xu), ch / (1.0 * xu))

        #arrows
        if not self.running and self.check_vel.checked:
            for ball in balls:
                #x component
                draw.arrow(canvas, ball.vel.x * self.arrow_scale,
                           2 * self.linewidth, ball.pos.x, ball.pos.y)
                canvas.fill_style = "#333333"
                canvas.fill()

                #y component
                canvas.translate(ball.pos.x, ball.pos.y)
                canvas.rotate(math.pi / 2)
                draw.arrow(canvas, ball.vel.y * self.arrow_scale,
                           2 * self.linewidth)
                canvas.fill()
                draw.reset2(canvas, xu)

                #velocity vector
                canvas.translate(ball.pos.x, ball.pos.y)
                if ball.vel.y > 0:
                    canvas.rotate(ball.vel.phi())
                else:
                    canvas.rotate(-ball.vel.phi())
                draw.arrow(canvas,
                           ball.vel.mag() * self.arrow_scale,
                           4 * self.linewidth)
                canvas.fill_style = "#49902a"
                canvas.fill()

                draw.reset2(canvas, xu)
Exemplo n.º 14
0
 def cleanup(self):
     """Cleanup the GUI (restore default state)."""
     pf.debug('GUI cleanup',pf.DEBUG.GUI)
     self.drawlock.release()
     pf.canvas.cancel_selection()
     pf.canvas.cancel_draw()
     draw.clear_canvas()
     #draw.wakeup()
     self.setBusy(False)
Exemplo n.º 15
0
    def btn_clear_click (self, **event_args):
        draw.reset2(self.canvas, 1)
        draw.clear_canvas(self.canvas, "#fff")
        self.newvalues = []
        self.all = []
        self.graph.func(self.startvals)
        self.lbl_mark.text = ""
        self.lbl_mark.background = "#fff"

        self.graph.plot(colour = "#fff", xmarker = self.xmarker, ymarker = self.ymarker)
Exemplo n.º 16
0
 def btn_clear_click (self, **event_args):
     draw.reset2(self.canvas, 1)
     draw.clear_canvas(self.canvas, "#fff")
     self.graph2.plot(colour = "#fff", xmarker = self.xmarker, ymarker = self.ymarker)
     self.newvalues = []
     self.all = []
     self.grid_stat.clear()
     self.grid_x_int.clear()
     self.grid_y_int.clear()
     self.lbl_mark.text = ""
     self.lbl_mark.background = "#fff"
     self.started = False
Exemplo n.º 17
0
    def draw_frame(self, canvas, balls):
        # draws border, arrows and balls on to canvas
        cw = self.cw
        ch = self.ch
        xu = self.xu

        # reset canvas
        draw.reset2(canvas, xu)

        # clear canvas
        draw.clear_canvas(canvas, "#fff")

        # balls
        for i in range(0, 2):
            if i % 2 == 0:
                canvas.fill_style = "#4c7fbe"
            else:
                canvas.fill_style = "#bb2828"
            draw.circle(canvas, balls[i].radius, balls[i].pos.x, balls[i].pos.y)
            canvas.fill()

        # borders
        canvas.stroke_style = "#000"
        canvas.line_width = self.border / xu
        canvas.stroke_rect(0, 0, cw / (1.0 * xu), ch / (1.0 * xu))

        # arrows
        if not self.running and self.check_vel.checked:
            for ball in balls:
                # x component
                draw.arrow(canvas, ball.vel.x * self.arrow_scale, 2 * self.linewidth, ball.pos.x, ball.pos.y)
                canvas.fill_style = "#333333"
                canvas.fill()

                # y component
                canvas.translate(ball.pos.x, ball.pos.y)
                canvas.rotate(math.pi / 2)
                draw.arrow(canvas, ball.vel.y * self.arrow_scale, 2 * self.linewidth)
                canvas.fill()
                draw.reset2(canvas, xu)

                # velocity vector
                canvas.translate(ball.pos.x, ball.pos.y)
                if ball.vel.y > 0:
                    canvas.rotate(ball.vel.phi())
                else:
                    canvas.rotate(-ball.vel.phi())
                draw.arrow(canvas, ball.vel.mag() * self.arrow_scale, 4 * self.linewidth)
                canvas.fill_style = "#49902a"
                canvas.fill()

                draw.reset2(canvas, xu)
Exemplo n.º 18
0
    def draw_all(self):
        canvas = self.canvas
        xu = self.xu
        canvas.xu  = xu
        ball = self.ball
        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#fff")

        #ball
        drawrad = ball.radius*(1/(1+ball.pos.z/3))
        if 0.01>drawrad or drawrad>10:
            self.running = False
            self.btn_run.text = "Run"
        else:
            draw.circle(canvas, drawrad, ball.pos.x, ball.pos.y)
        canvas.fill_style = "rgb(30, 96, 139)"
        canvas.fill()

        if self.running and self.check_trail.checked:
            b = len(self.trail)
            canvas.begin_path()
            canvas.move_to(self.trail[0].x, self.trail[0].y)
            canvas.quadratic_curve_to(self.trail[int(b/2)].x, self.trail[int(b/2)].y, self.trail[-1].x, self.trail[-1].y)
            canvas.line_width = 0.03
            canvas.stroke()

        #paths
        if not self.running and self.check_paths.checked:
            draw.paths(canvas,self.paths, self.line_width, "#000")

        #arrows
        if not self.running:
            draw.vel_arrows(canvas, self.ball, self.line_width, self.arrow_scale)
            draw.reset2(canvas, xu)

        #field arrows
        canvas.scale(1.0/self.xu, 1.0/self.xu)
        draw.cart_arrows(canvas, self.E, 3, 100/((self.E.mag()+1)), x = 30, y = 50)
        B2 = self.B*10e3
        draw.cart_arrows(canvas, B2, 3, 100/((B2.mag()+1)), x = (self.cw - 80), y = 50)
        canvas.scale(1,-1)
        canvas.font= "20px sans-serif"
        canvas.fill_text("E",50, -30 )
        canvas.fill_text("B",(self.cw - 60), -30 )
        canvas.scale(self.xu, -self.xu)


        #frame
        draw.border(canvas,5, "#000", xu)
Exemplo n.º 19
0
    def draw_all(self):
        canvas = self.canvas
        draw.reset2(self.canvas, self.xu)
        draw.clear_canvas(self.canvas, "#fff")
        big = math.sqrt((self.cw / self.xu * 1.0)**2 +
                        (self.ch / self.xu * 1.0)**2)

        for point in self.points:
            point.vel.x = self.spd_slider.value * 0.1
            self.draw_source(point, self.canvas)
        for point in self.pulses:
            if point.wavefront > big:
                self.pulses.remove(point)
            else:
                self.draw_source(point, self.canvas, colour="#fff")
Exemplo n.º 20
0
 def draw_all(self):
     canvas = self.canvas
     draw.reset2(self.canvas, self.xu)
     draw.clear_canvas(self.canvas, "#fff")
     self.wav = self.slid_wav.value
     # div = self.cw/(self.xu*10.0)
     # canvas.begin_path()
     # for i in range(10):
     #     canvas.move_to(i*div, 0)
     #     canvas.line_to(i*div, self.ch/(self.xu*1.0))
     #
     # canvas.line_width = 0.003
     # canvas.stroke()
     for point in self.points:
         self.draw_source(point, self.canvas)
Exemplo n.º 21
0
    def draw_all(self):
        canvas = self.canvas
        draw.reset2(self.canvas, self.xu)
        draw.clear_canvas(self.canvas, "#fff")
        big = math.sqrt((self.cw/self.xu*1.0)**2 + (self.ch/self.xu*1.0)**2)


        for point in self.points:
            point.vel.x = self.spd_slider.value*0.1
            self.draw_source(point, self.canvas)
        for point in self.pulses:
            if point.wavefront >big:
                self.pulses.remove(point)
            else:
                self.draw_source(point, self.canvas, colour = "#fff")
Exemplo n.º 22
0
 def draw_all(self):
     canvas = self.canvas
     draw.reset2(self.canvas, self.xu)
     draw.clear_canvas(self.canvas, "#fff")
     self.wav = self.slid_wav.value
     # div = self.cw/(self.xu*10.0)
     # canvas.begin_path()
     # for i in range(10):
     #     canvas.move_to(i*div, 0)
     #     canvas.line_to(i*div, self.ch/(self.xu*1.0))
     #
     # canvas.line_width = 0.003
     # canvas.stroke()
     for point in self.points:
         self.draw_source(point, self.canvas)
Exemplo n.º 23
0
    def initial(self, canvas):
        draw.reset2(canvas, self.xu)
        draw.clear_canvas(canvas, "#fff")

        self.N  =  self.slid_N.value
        self.L = self.slid_L.value
        self.v = self.slid_v.value

        self.draw_polygon(canvas, self.N, self.L)
        if self.reset:
            self.bug.pos = physics.vector3(-self.L/2, self.d, 0)
            self.path  = [self.bug.pos, self.bug.pos]
        draw.reset2(canvas, self.xu)
        self.draw_bugs(canvas, self.bug.pos, "#2a2ac7")
        # for i in range(len(self.path)-1):
        #     canvas.begin_path()
        #     canvas.move_to(self.path[i].x, self.path[i].y)
        #     canvas.line_to(self.path[i+1].x, self.path[i+1].y)
        #     canvas.stroke()

        draw.reset2(canvas, self.xu)
Exemplo n.º 24
0
    def draw_all(self):
        draw.reset2(self.canvas, self.xu)
        draw.clear_canvas(self.canvas, "#fff")
        N = int(self.slits.N_slider.value)
        d = float(self.slits.d_slider.value)
        a = float(self.single.a_slider.value)
        n = float(self.grating.n_slider.value)

        if self.aperture == "slits":
            if self.rad_int.selected:
                self.draw_slit_int(N,d,a, self.wav)
            elif self.rad_pat.selected:
                self.draw_slit_pat(N,d,a, self.wav)
        elif self.aperture == "single":
            if self.rad_int.selected:
                self.draw_slit_int(N,d,a, self.wav, "single")
            elif self.rad_pat.selected:
                self.draw_slit_pat(N,d,a, self.wav, "single")

        elif self.aperture == "grating":
            self.draw_grating(n, self.wav)
Exemplo n.º 25
0
    def draw_all(self):
        draw.reset2(self.canvas, self.xu)
        draw.clear_canvas(self.canvas, "#fff")
        N = int(self.slits.N_slider.value)
        d = float(self.slits.d_slider.value)
        a = float(self.single.a_slider.value)
        n = float(self.grating.n_slider.value)

        if self.aperture == "slits":
            if self.rad_int.selected:
                self.draw_slit_int(N, d, a, self.wav)
            elif self.rad_pat.selected:
                self.draw_slit_pat(N, d, a, self.wav)
        elif self.aperture == "single":
            if self.rad_int.selected:
                self.draw_slit_int(N, d, a, self.wav, "single")
            elif self.rad_pat.selected:
                self.draw_slit_pat(N, d, a, self.wav, "single")

        elif self.aperture == "grating":
            self.draw_grating(n, self.wav)
    def btn_check_click(self, **event_args):
        tol = 100

        corr_x_ints = self.corr_x_ints
        corr_y_ints = self.corr_y_ints
        corr_x_stat = zip(*self.corrstats)[0]
        corr_y_stat = zip(*self.corrstats)[1]

        ent_x_ints = graphs.extract_vals(self.x_int_box)
        ent_y_ints = graphs.extract_vals(self.y_int_box)
        ent_x_stat = graphs.extract_vals(self.x_stat_box)
        ent_y_stat = graphs.extract_vals(self.y_stat_box)

        score = graphs.val_compare(ent_x_ints, corr_x_ints) + graphs.val_compare(ent_y_ints, corr_y_ints)
        score += graphs.val_compare(ent_x_stat, corr_x_stat) + graphs.val_compare(ent_y_stat, corr_y_stat)
        score *= 100/4


        self.lbl_mark.text = "{0}%".format(round(score))

        self.lbl_mark.background = "#fff"

        #TODO pass mark checking
        if score >self.pass_mark:
            self.lbl_mark.text += "\nWell done!"
        else:
            self.lbl_mark.text += "\nScore  over {0}% to pass".format(self.pass_mark)

        draw.reset2(self.canvas, 1)
        draw.clear_canvas(self.canvas)
        self.graph.plot(colour = "rgb(214, 106, 72)", xmarker = self.xmarker, ymarker = self.ymarker)

        xlabs = [x.text for x in self.x_int_box]
        ylabs = [x.text for x in self.y_int_box]
        statlabs = ["({0}, {1})".format(self.x_stat_box[i].text, self.y_stat_box[i].text) for i in range(len(self.x_stat_box))]


        self.graph.circle_points(zip(self.test_x_ints, [0]*len(self.test_x_ints)), self.x_circle, pointlabels = xlabs)
        self.graph.circle_points(zip([0]*len(self.test_y_ints), self.test_y_ints), self.y_circle, pointlabels = ylabs, pointoffset = len(xlabs))
        self.graph.circle_points(self.teststats, self.stat_circle, pointlabels = statlabs, pointoffset = len(xlabs) + len(ylabs))
    def btn_submit_click(self, **event_args):
        self.grid_stat.clear()
        self.grid_x_int.clear()
        self.grid_y_int.clear()
        self.lbl_mark.background = "#fff"

        if len(self.all) > 0:
            draw.clear_canvas(self.canvas, "#fff")


            self.newvalues = graphs.gauss_blur(self.all)
            self.graph.func(self.newvalues)
            
            self.drawn_process()



            self.graph.plot(colour = "rgb(214, 106, 72)", xmarker = self.xmarker, ymarker = self.ymarker)


            self.graph.circle_points(zip(self.test_x_ints, [0]*len(self.test_x_ints)), self.x_circle)
            self.graph.circle_points(zip([0]*len(self.test_y_ints), self.test_y_ints), self.y_circle, pointoffset = len(self.test_x_ints))
            self.graph.circle_points(self.teststats, self.stat_circle, pointoffset = len(self.test_x_ints) + len(self.test_y_ints))
Exemplo n.º 28
0
    def draw_all(self):
        canvas = self.canvas
        self.cw  = canvas.get_width()
        self.ch = canvas.get_height()
        cw= self.cw
        ch = self.ch
        xu = self.xu
        ball= self.ball

        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#fff")

        canvas.fill_style = "#000"
        canvas.fill_rect(0, 0, cw, self.floor_height)

        draw.circle(canvas, ball.radius, ball.pos.x, ball.pos.y)
        canvas.fill_style= "#3683f3"
        canvas.fill()

        #arrow
        if not self.running:
            ball = self.ball
            #velocity vector
            canvas.translate(ball.pos.x, ball.pos.y)
            if ball.vel.y>0:
                canvas.rotate(ball.vel.phi())
            else:
                canvas.rotate(-ball.vel.phi())
            draw.arrow(canvas, ball.vel.mag()*self.arrow_scale, 4*self.linewidth)
            canvas.fill_style = "#49902a"
            canvas.fill()
            draw.reset2(canvas, xu)

        #dashes
        if not self.running:
            draw.paths(canvas,self.paths, self.linewidth, "#000")
Exemplo n.º 29
0
    def btn_submit_click(self, **event_args):
        if len(self.newvalues) > 0:
            draw.clear_canvas(self.canvas, "#fff")

            if self.check_blur.checked:
                self.newvalues = self.gauss_blur(self.newvalues)

            mark = self.check()*100
            self.lbl_mark.text = str(repr(mark)) + "%"
            colour = "#198dbf"
            if mark >self.pass_mark:
                self.lbl_mark.text += "\nWell done!"
            else:
                colour = "#fff"
                self.lbl_mark.text += "\nScore  over {0}% to pass".format(self.pass_mark)
            self.graph.plot( xmarker = self.graph.xmarker/self.graph.xu, ymarker = self.graph.ymarker/self.graph.yu, colour = colour)

            self.graph2 = draw.graph_plot(self.canvas, self.newvalues)
            self.graph2.axes_enabled = False
            self.graph2.xlabel = self.xlabel
            self.graph2.ylabel = self.ylabel
            self.graph2.xrange = self.graph.xrange
            self.graph2.yrange = self.graph.yrange
            self.graph2.plot(colour = "rgb(214, 106, 72)", xmarker = self.graph.xmarker/self.graph.xu, ymarker = self.graph.ymarker/self.graph.yu)
Exemplo n.º 30
0
    def draw(self):
        canvas = self.canvas
        draw.clear_canvas(canvas)
        for comp in self.components:
            comp.draw()


            canvas.line_join = "round"
            start = comp.outpos
            if comp.output == None:
                raise "Component not connected to anything {0}".format(comp.name)
            end = comp.output.inpos

            if start != None and end != None:
                canvas.begin_path()
                canvas.move_to(start[0], start[1])

                if start[0] <= end[0]:
                    canvas.line_to(end[0], start[1])
                else:
                    canvas.line_to(start[0], end[1])

                canvas.line_to(end[0], end[1])
                comp.draw_end()
Exemplo n.º 31
0
    def draw_all(self):
        canvas = self.canvas
        xu = self.xu
        canvas.xu = xu
        ball = self.ball
        draw.reset2(canvas, xu)
        draw.clear_canvas(canvas, "#fff")

        #ball
        drawrad = ball.radius * (1 / (1 + ball.pos.z / 3))
        if 0.01 > drawrad or drawrad > 10:
            self.running = False
            self.btn_run.text = "Run"
        else:
            draw.circle(canvas, drawrad, ball.pos.x, ball.pos.y)
        canvas.fill_style = "rgb(30, 96, 139)"
        canvas.fill()

        if self.running and self.check_trail.checked:
            b = len(self.trail)
            canvas.begin_path()
            canvas.move_to(self.trail[0].x, self.trail[0].y)
            canvas.quadratic_curve_to(self.trail[int(b / 2)].x,
                                      self.trail[int(b / 2)].y,
                                      self.trail[-1].x, self.trail[-1].y)
            canvas.line_width = 0.03
            canvas.stroke()

        #paths
        if not self.running and self.check_paths.checked:
            draw.paths(canvas, self.paths, self.line_width, "#000")

        #arrows
        if not self.running:
            draw.vel_arrows(canvas, self.ball, self.line_width,
                            self.arrow_scale)
            draw.reset2(canvas, xu)

        #field arrows
        canvas.scale(1.0 / self.xu, 1.0 / self.xu)
        draw.cart_arrows(canvas,
                         self.E,
                         3,
                         100 / ((self.E.mag() + 1)),
                         x=30,
                         y=50)
        B2 = self.B * 10e3
        draw.cart_arrows(canvas,
                         B2,
                         3,
                         100 / ((B2.mag() + 1)),
                         x=(self.cw - 80),
                         y=50)
        canvas.scale(1, -1)
        canvas.font = "20px sans-serif"
        canvas.fill_text("E", 50, -30)
        canvas.fill_text("B", (self.cw - 60), -30)
        canvas.scale(self.xu, -self.xu)

        #frame
        draw.border(canvas, 5, "#000", xu)
Exemplo n.º 32
0
    def btn_check_click(self, **event_args):
        score = 0
        tol = 100

        corr_x_ints = self.corr_x_ints
        corr_y_ints = self.corr_y_ints
        corrstats = self.corrstats
        x_int_entries = self.x_int_entries
        y_int_entries = self.y_int_entries
        stat_entries = self.stat_entries

        for i in range(len(corr_x_ints)):
            if i< len(x_int_entries):
                try:
                    test = float(x_int_entries[i].text)
                except :
                    test = 0
                gap =  corr_x_ints[i] - test
                add =  1 - math.sqrt(abs(gap/corr_x_ints[i]))
                score += add if add>0 else 0

        for i in range(len(corr_y_ints)):
            if i< len(y_int_entries):
                try:
                    test = float(y_int_entries[i].text)
                except :
                    test = 0
                gap =  corr_y_ints[i] - test
                add =  1-math.sqrt(abs(gap/corr_y_ints[i]))
                score += add if add>0 else 0

        for i in range(len(corrstats)):
            if i< len(stat_entries):
                try:
                    test = (float(stat_entries[i][0].text), float(stat_entries[i][1].text))
                except:
                    test = 0
                gapx =  corrstats[i][0] - test[0]
                gapy = corrstats[i][1] - test[1]
                add =  1- math.sqrt(abs(gapx/(corrstats[i][0]))) - math.sqrt(abs(gapy/(corrstats[i][1])))
                score += add if add>0 else 0

        score *= 100/(len(corrstats) + len(corr_y_ints) + len(corr_x_ints))

        self.lbl_mark.text = "{0}%".format(round(score))

        colour = "#198dbf"
        self.lbl_mark.background = "#fff"
        if score >self.pass_mark:
            self.lbl_mark.text += "\nWell done!"
        else:
            colour = "#fff"
            self.lbl_mark.text += "\nScore  over {0}% to pass".format(self.pass_mark)

        draw.clear_canvas(self.canvas)
        self.graph2.axes_enabled = True
        self.graph2.plot(colour = "rgb(214, 106, 72)", xmarker = self.xmarker, ymarker = self.ymarker)
        xlabs = [x.text for x in self.x_int_entries]
        ylabs = [x.text for x in self.y_int_entries]
        statlabs = ["({0}, {1})".format(x[0].text, x[1].text) for x in self.stat_entries]


        self.graph.circle_points(zip(self.test_x_ints, [0]*len(self.test_x_ints)), "#336888", pointlabels = xlabs)
        self.graph.circle_points(zip([0]*len(self.test_y_ints), self.test_y_ints), "D69648", pointlabels = ylabs, pointoffset = len(xlabs))
        self.graph.circle_points(self.teststats, "#339664", pointlabels = statlabs, pointoffset = len(xlabs) + len(ylabs))
Exemplo n.º 33
0
            settings.change_size(index + 1)
            return True


settings = Settings()
draw.draw_canvas(screen, settings.colors)
while True:
    for event in pygame.event.get():
        # Red X is clicked
        if event.type == pygame.QUIT:
            pygame.quit()
            break
        # Mouse down could be an attempt to draw or change colors
        elif event.type == pygame.MOUSEBUTTONDOWN:
            # Left click only
            if event.button == 1:
                if on_canvas(event.pos):
                    drawing(settings.current_color)

                elif on_color_selector(event.pos):
                    settings.current_color = settings.colors[get_color_index(
                        event.pos)]

                elif on_clear(event.pos):
                    draw.clear_canvas(screen)

                elif on_size(event.pos):
                    print(f'New size is {settings.size}')

    pygame.display.update()
Exemplo n.º 34
0
 def btn_clear_click (self, **event_args):
     draw.reset2(self.canvas, 1)
     draw.clear_canvas(self.canvas, "#fff")
     self.graph.plot(xmarker = self.graph.xmarker/self.graph.xu, ymarker = self.graph.ymarker/self.graph.yu, colour = "#fff")
     self.newvalues = []
Exemplo n.º 35
0
    def btn_submit_click(self, **event_args):
        if len(self.all) > 0:
            draw.clear_canvas(self.canvas, "#fff")


            self.newvalues = graphs.gauss_blur(self.all)

            tolx  = 100/self.graph.xu
            toly = 100/self.graph.yu

            self.teststats = find_stationary(self.newvalues, tol = toly)
            self.test_x_ints = find_intersecs(self.newvalues, tol = toly, x = True)
            self.test_y_ints = find_intersecs(self.newvalues, tol = tolx, y = True)

            self.lbl_mark.text = ""
            numbers = True


            if len(self.corrstats) != len(self.teststats):
                self.lbl_mark.text += "Wrong number of stationary points"
                self.lbl_mark.background = self.error_red
                numbers = False

            if len(self.corr_x_ints) != len(self.test_x_ints):
                self.lbl_mark.text += "\nWrong number of x intersections"
                self.lbl_mark.background = self.error_red
                numbers = False

            if len(self.corr_y_ints) != len(self.test_y_ints):
                self.lbl_mark.text += "\nWrong number of y intersections"
                self.lbl_mark.background = self.error_red
                numbers = False

            if numbers:
                xquads = False
                yquads = False
                statquads = False
                for i in range(len(self.test_x_ints)):
                    test = self.test_x_ints[i]
                    corr = self.corr_x_ints[i]
                    if test*corr<=0:
                        xquads = True

                for i in range(len(self.test_y_ints)):
                    test = self.test_y_ints[i]
                    corr = self.corr_y_ints[i]
                    if test*corr<=0:
                        yquads = True

                for i in range(len(self.teststats)):
                    test = self.teststats[i]
                    corr = self.corrstats[i]

                    if test[0]*corr[0]<=0 or test[1]*corr[1]<=0:
                        statquads = True

                if xquads or yquads or statquads:
                    self.lbl_mark.background = self.error_red
                    if xquads:
                        self.lbl_mark.text += "\nWrong sign for x Intersection(s)"
                    if yquads:
                        self.lbl_mark.text += "\nWrong sign for y Intersection(s)"
                    if statquads:
                        self.lbl_mark.text += "\nStationary point(s) in wrong quadrant"
                else:
                    mark = self.check()*100
                    self.lbl_mark.text = "{0}%".format(round(score))

                    self.lbl_mark.background = "#fff"

                    #TODO pass mark checking
                    if score >self.pass_mark:
                        self.lbl_mark.text += "\nWell done!"
                    else:
                        self.lbl_mark.text += "\nScore  over {0}% to pass".format(self.pass_mark)

                    self.graph2 = draw.graph_plot(self.canvas, self.newvalues)
                    self.graph2.axes_enabled = True
                    self.graph2.xlabel = self.xlabel
                    self.graph2.ylabel = self.ylabel
                    self.graph2.xrange = self.graph.xrange
                    self.graph2.yrange = self.graph.yrange
                    self.graph2.plot(colour = self.draw_colour, xmarker = self.xmarker, ymarker = self.ymarker)