Page 64 - MATINF Nr. 9-10
P. 64

64                                                                                     R.D. Albu



                pasare2 = Finch(’B’)

                 for i in range(10): #Sincronizare blinking    while pasare1.getOrientation() == ”Level”:
                     pasare1.setBeak(0,100,0)                     if pasare2.getButton(’A’):
                     pasare2.setBeak(0,100,0)                       pasare1.setTail(”all”,0,0,100)
                     sleep(1)                                     if pasare2.getButton(’B’):
                     pasare1.setBeak(0,100,100)                     pasare1.setTail(”all”,0,0,0)
                     pasare2.setBeak(0,100,100)                pasare1.stopAll()
                     sleep(1)                                  pasare2.stopAll()
                 pasare1.stopAll()
                 pasare2.stopAll()

                 while not pasare1.getButton(’A’):        while not pasare1.getButton(’A’):
                   if pasare1.getOrientation() == ”Cioc jos”:  acc = pasare1.getAcceleration()
                     pasare2.setMove(’F’,10,50)             print(acc)
                   elif pasare1.getOrientation() == ”Cioc sus”:  if abs(acc[0]) < abs(acc[1]):
                     pasare2.setMove(’B’,10,50)               pasare2.setMotors(round(-3*acc[1]),round(-3*acc[1]))
                                           ˆ
                   elif pasare1.getOrientation()==”Inclinat stˆanga”:  else:
                     pasare2.setTurn(’L’,90,50)               pasare2.setMotors(round(3*acc[0]),round(-3*acc[0]))
                                                  ˆ
                   elif      pasare1.getOrientation()==”Inclinat  pasare1.stopAll()
                 dreapta”:                                pasare2.stopAll()
                     pasare2.setTurn(’R’,90,50)
                Poate fi explorat˘a recursivitatea cu Finch. Recursivitatea este atunci cˆand o funct , ie se
            apeleaz˘ pe ea ˆıns˘s , i. Se poate folosi recursivitatea pentru a desena fractali Koch. Pentru mai
                               a
                    a
            multe tipuri de fractali, se poate accesa siteul [7].
                Se poate folosi algoritmul dat ˆın How to Think Like a Computer Scientist: Learning with
            Python 3 by Wentworth, Elkner, Downey s , i Meyers. Pas , ii de mai jos pot fi utilizat , i pentru a
            desena un fractal Koch de ordinul n:

               1. Desenat , i fractalul Koch de ordinul n - 1 s , i dimensiunea L / 3.
                                        ◦
               2. Virat , i la stˆanga la 60 .
               3. Desenat , i fractalul Koch de ordinul n - 1 s , i dimensiunea L / 3.
                                          ◦
               4. Virat , i la dreapta la 120 .
               5. Desenat , i fractalul Koch de ordinul n - 1 s , i dimensiunea L / 3.
                                        ◦
               6. Virat , i la stˆanga la 60 .
               7. Desenat , i fractalul Koch de ordinul n - 1 s , i dimensiunea L / 3.


                from BirdBrain import Finch # Import biblioteca Finch
                from time import sleep # Import funct , ia sleep()

                pasare = Finch()

                # Funct , ia se apeleaz˘ pe sine recursiv pentru a desena un fractal Koch.
                                     a
                def desenareFractal(ordin, distant , ˘a):

                  if ordin == 0:

                     pasare.setMove(’F’,distant , a,50)
                  else:

                     desenareFractal(ordin - 1, round(distant , a/3))

                     bird.setTurn(’L’,60,50)

                     desenareFractal(ordin - 1, round(distant , a/3))
                     bird.setTurn(’R’,120,50)
   59   60   61   62   63   64   65   66   67   68   69