Beispiel #1
0
 def test_angle_entre(self):
     """ Vecteur -> Float
     Permet de retourner l'angle entre deux vecteurs (en degrés)
     """
     v = Vecteur.Vecteur(0,1)
     autreVecteur = Vecteur.Vecteur(1, 0)
     self.assertTrue(abs(v.angle_entre(autreVecteur)) - 90. <= 0.00001)
Beispiel #2
0
    def test_dessineVecteur(self):
        t = Terrain.Terrain(1000, 1000, 1)
        v = Vecteur.Vecteur(random.uniform(100., 200),
                            random.uniform(100., 200.))
        posOrigine = (500., 500.)

        t.dessineVecteur(posOrigine, v)

        if v.x == 0. and v.y > 0.:
            angle = pi / 2
        elif v.x == 0. and v.y < 0.:
            angle = -pi / 2
        else:
            angle = atan(v.y / v.x)

        if v.x < 0.:
            angle += pi

        vecteurUnite = Vecteur.Vecteur(
            cos(angle) * t.echelle,
            sin(angle) * t.echelle)

        traceX = posOrigine[0]
        traceY = posOrigine[1]

        norme = v.norme()

        while Vecteur.Vecteur(traceX - posOrigine[0],
                              traceY - posOrigine[1]).norme() <= norme:
            self.assertFalse(t.ajout_objet_continu(object(), traceX, traceY))
            traceX += vecteurUnite.x
            traceY += vecteurUnite.y
Beispiel #3
0
    def dessineVecteur(self, posOrigine, vecteur):
        if vecteur.x == 0. and vecteur.y > 0.:
            angle = pi / 2
        elif vecteur.x == 0. and vecteur.y < 0.:
            angle = -pi / 2
        else:
            angle = atan(vecteur.y / vecteur.x)

        if vecteur.x < 0.:
            angle += pi

        vecteurUnite = Vecteur.Vecteur(
            cos(angle) * self.echelle,
            sin(angle) * self.echelle)

        traceX = posOrigine[0]
        traceY = posOrigine[1]

        norme = vecteur.norme()

        while Vecteur.Vecteur(traceX - posOrigine[0],
                              traceY - posOrigine[1]).norme() <= norme:
            self.ajout_objet_continu(object(), traceX, traceY)
            traceX += vecteurUnite.x
            traceY += vecteurUnite.y
Beispiel #4
0
    def test__add__(self):
        for _ in range(1000):
            v1 = Vecteur.Vecteur(random.randint(-500, 500), random.randint(-500, 500))
            v2 = Vecteur.Vecteur(random.randint(-500, 500), random.randint(-500, 500))
            vv = v1.__add__(v2)

            self.assertTrue(vv.x == v1.x + v2.x)
            self.assertTrue(vv.y == v1.y + v2.y)
Beispiel #5
0
    def test_collision(self):
        """ Tuple(x1,y1) * Vecteur * Tuple(x2,y2) -> Boolean
        Permet de dire s'il y a collision entre deux vecteurs
        """
        v = Vecteur.Vecteur(0,1)
        autreVecteur = Vecteur.Vecteur(1, 0)

        self.assertTrue(v.collision((0.,0.), autreVecteur, (0.,0.)))

        v.y = -1.
        self.assertTrue(v.collision((0.,0.), autreVecteur, (0.,0.)))

        autreVecteur.x = -1
        self.assertTrue(v.collision((0.,0.), autreVecteur, (0.,0.)))
Beispiel #6
0
    def test_collision(self):
        """tuple(int * int) *  Vecteur -> boolean
        methode qui verifie la collision du robot avec un objet.
        """

        liste_sommets = []

        for _ in range(20):
            liste_sommets.append(
                (random.uniform(10., 50.), random.uniform(10., 50.)))

        p = Polygone.Polygone(liste_sommets)
        posRobot = (random.uniform(10., 50.), random.uniform(10., 50.))
        vD = Vecteur.Vecteur(random.uniform(10., 50.),
                             random.uniform(10., 50.))

        bo = False
        i = 0
        while i < len(p._liste_sommet):
            if p.liste_vecteur[i].collision(p._liste_sommet[i], vD, posRobot):
                bo = True
                break
            i = i + 1

        self.assertTrue(bo == p.collision(posRobot, vD))
Beispiel #7
0
    def is_polygone(self, polygone):
        v = Vecteur.Vecteur(0., 0.)

        for vp in polygone.liste_vecteur:
            v = v + vp

        self.assertTrue(abs(v.x) <= 0.00001 and abs(v.y) <= 0.00001)
Beispiel #8
0
    def test_constructVecteur(self):
        random_x = random.randint(-500, 500)
        random_y = random.randint(-500, 500)
        V = Vecteur.Vecteur(random_x, random_y)

        self.assertTrue(V.x == random_x)
        self.assertTrue(V.y == random_y)
Beispiel #9
0
    def test_collision(self):
        """tuple (int * int) * Vecteur -> boolean
        méthode qui verifie la collision du robot avec les objets contenu sur le terrain ainsi qu'avec 
        les vecteurs qui le delimitent
        : param tuple : coordonnees du robot
        : param Vecteur : vecteur de deplacement du robot
        """

        tc = TerrainContinu.Carre(20)
        tc.ajoutPolygone(Polygone.Carre((10., 10.), 5))

        posOrigine = (3., 3.)
        vecteurDeplacement = Vecteur.Vecteur(random.uniform(-10., 10.),
                                             random.uniform(-10., 10.))

        b = False
        for p in tc.listePolygone:
            if p.collision(posOrigine, vecteurDeplacement):
                b = True
        # posX, posY : position du premier vecteur du terrain
        posX = tc.polygoneSurface.liste_sommet[0].x
        posY = tc.polygoneSurface.liste_sommet[1].y
        for v in tc.polygoneSurface.liste_vecteur:
            # vecteurDeplacement et (x,y) du robot
            if v.collision((posX, posY), vecteurDeplacement, posOrigine):
                b = True
            # calcul de l'origine des vecteurs suivants
            posX = posX + v.x
            posY = posY + v.y

        self.assertTrue(b == tc.collision(posOrigine, vecteurDeplacement))
Beispiel #10
0
    def getDistance(self, tc):
        vUnitaire = Vecteur.Vecteur(
            cos(radians(self.angle)) * 1,
            sin(radians(self.angle)) * 1)
        while not tc.collision((self.x, self.y), vUnitaire):
            vUnitaire += vUnitaire

        return vUnitaire.norme()
Beispiel #11
0
 def test_rotation(self):
     rx = random.randint(-50, 50)
     ry = random.randint(-50, 50)
     v = Vecteur.Vecteur(rx, ry)
     angle = random.uniform(-180, 180)
     v = v.rotation(angle)
     vx = rx * math.cos(math.radians(angle)) - ry * math.sin(math.radians(angle))
     vy = rx * math.sin(math.radians(angle)) + ry * math.cos(math.radians(angle))
     self.assertLessEqual(abs(v.x - vx), 0.00001)
     self.assertLessEqual(abs(v.y - vy), 0.00001)
Beispiel #12
0
 def test_Sym_XVecteur(self):
     rx = random.randint(-50, 50)
     ry = random.randint(-50, 50)
     v1 = Vecteur.Vecteur(rx, ry)
     v2 = v1.get_sym_x_axis()
     v3 = v1 + v2
     self.assertEqual(v1.norme(), v2.norme())
     self.assertEqual(v1.x, v2.x)
     self.assertEqual(v3.x, 2 * v1.x)
     self.assertEqual(v3.y, 0)
Beispiel #13
0
    def __init__(self, liste_sommet, liste_vecteur=None):
        if liste_vecteur is None:
            liste_vecteur = []
        self.liste_vecteur = liste_vecteur
        self._liste_sommet = liste_sommet

        self.liste_sommet = []
        for s in liste_sommet:
            self.liste_sommet.append(Sommet.Sommet(s[0], s[1]))

        if not self.liste_vecteur:
            for i in range(len(liste_sommet) - 1):
                x1, y1 = liste_sommet[i]
                x2, y2 = liste_sommet[i + 1]
                v = Vecteur.Vecteur((x2 - x1), (y2 - y1))
                self.liste_vecteur.append(v)
            x0, y0 = liste_sommet[len(liste_sommet) - 1]
            xn, yn = liste_sommet[0]
            v = Vecteur.Vecteur((xn - x0), (yn - y0))
            self.liste_vecteur.append(v)
Beispiel #14
0
 def test_produitVecteurScalaire(self):
     # tests pour un scalaire entier
     for _ in range(10):
         aleaX = random.randint(-500, 500)
         aleaY = random.randint(-500, 500)
         v = Vecteur.Vecteur(aleaX, aleaY)
         scalaire = random.randint(-500, 500)
         vScalaire = v.__mul__(scalaire)
         vtest = Vecteur.Vecteur(aleaX * scalaire, aleaY * scalaire)
         self.assertTrue(vScalaire.x == vtest.x)
         self.assertTrue(vScalaire.y == vtest.y)
     # tests pour un scalaire flottant
     for _ in range(10):
         aleaX = random.uniform(-500, 500)
         aleaY = random.uniform(-500, 500)
         v = Vecteur.Vecteur(aleaX, aleaY)
         scalaire = random.randint(-500, 500)
         vScalaire = v.__mul__(scalaire)
         vtest = Vecteur.Vecteur(aleaX * scalaire, aleaY * scalaire)
         self.assertTrue(vScalaire.x == vtest.x)
         self.assertTrue(vScalaire.y == vtest.y)
Beispiel #15
0
    def test_symXVecteur(self):
        for _ in range(1000):
            rx = random.randint(-50, 50)
            ry = random.randint(-50, 50)
            v1 = Vecteur.Vecteur(rx, ry)
            v2 = v1.get_sym_x_axis()
            v3 = v1 + v2

            self.assertTrue(v1.norme() == v2.norme())  # test norme vecteur et son symetrique (Ox) sont identiques
            self.assertTrue(v1.x == v2.x)  # test que l'abscisse ne change pas dans le symetrique (Ox)
            self.assertTrue(v3.x == 2 * v1.x)  # test prop. somme vect. et son sym.(Oy) => abscisseX somme est doublé
            self.assertTrue(v3.y == 0)  # test prop. somme vect. et son sym.(Ox) => ordonnéeY somme est nulle
Beispiel #16
0
    def test_normeVecteur(self):
        # test calcul norme vecteur avec des valeurs positives
        for _ in range(100):
            aleaX = random.randint(0, 1000)
            aleaY = random.randint(0, 1000)
            v = Vecteur.Vecteur(aleaX, aleaY)
            self.assertTrue(v.norme() == math.sqrt(aleaX * aleaX + aleaY * aleaY))

        # test calcul norme vecteur avec des valeurs negatives
        for _ in range(100):
            aleaX = random.randint(-1000, 0)
            aleaY = random.randint(-1000, 0)
            v = Vecteur.Vecteur(aleaX, aleaY)
            self.assertTrue(v.norme() == math.sqrt(aleaX * aleaX + aleaY * aleaY))

        # test calcul norme vecteur avec des valeurs positives et/ou negatives
        for _ in range(100):
            aleaX = random.randint(-500, 500)
            aleaY = random.randint(-500, 500)
            v = Vecteur.Vecteur(aleaX, aleaY)
            self.assertTrue(v.norme() == math.sqrt(aleaX * aleaX + aleaY * aleaY))
Beispiel #17
0
 def setUp(self):
     self.v1 = Vecteur.Vecteur(4, 7)
     self.v2 = Vecteur.Vecteur(7, -3)
Beispiel #18
0
 def test_norme(self):
     aleaX = random.randint(-100, 100)
     aleaY = random.randint(-100, 100)
     v = Vecteur.Vecteur(aleaX, aleaY)
     self.assertEqual(v.x, aleaX)
     self.assertEqual(v.y, aleaY)
Beispiel #19
0
 def vitesse(self, vitesse):
     self.vecteurDeplacement = Vecteur.Vecteur(
         cos(radians(self.angle)) * vitesse,
         sin(radians(self.angle)) * vitesse)
     self._vitesse = vitesse