def test_angle45(self):
     """teste quand l'angle est 45, a=1"""
     # a = 1 quand angle = 45
     a, b = angleToFunction(45, (0, 0))
     # a= 0.9999999999 a cause des arrondis de python
     self.assertEqual(round(a), 1.0)
     self.assertEqual(b, 0.0)
 def test_angle315(self):
     """teste quand l'angle est 315 au point (1,0), a=-1 et b=-1"""
     # a=-1 et b=-1
     a, b = angleToFunction(315, (1, 0))
     self.assertEqual(round(a), -1.0)
     self.assertEqual(round(b), -1.0)
 def test_angle225(self):
     """teste quand l'angle est 255 au point (1,1), a=1 et b=2 """
     # a= 1 et b=2.0
     a, b = angleToFunction(225, (1, 1))
     self.assertEqual(round(a), 1.0)
     self.assertEqual(b, 2.0)
 def test_angle180(self):
     """teste quand l'angle est 180, a tend vers moins l'infini"""
     # a tend vers -∞ et b = 0
     a, b = angleToFunction(180, (0, 0))
     self.assertLess(a, -10e10)
     self.assertEqual(b, 0)
 def test_angle0(self):
     """teste que quand l'angle est 0, a tend vers l'infini"""
     # a tend vers l'infini et b = 0
     a, b = angleToFunction(0, (0, 0))
     self.assertGreater(a, 10e10)
     self.assertEqual(b, 0)
예제 #6
0
    def amerCreation(self, event):
        """
        Creation du trace des amers et determination de la position
            @type event: QMouseEvent
            @param event: objet clic de souris
        """
        pos = event.pos()
        # fenetre demande angle de l'amer
        deg, ok = QInputDialog.getDouble(self, "Angle de l'amer",
                                         "Angle de l'amer")
        #deg = deg + 180
        #deg = deg % 360
        # si click ok
        if ok:
            # si angle valide
            if 0. <= deg < 360.:
                # supprime les anciens traces
                if len(self.line) > 2:
                    self.supprimerTraces()
                # cas 0 et 180
                if deg == 0:
                    # self.line.append((pos.x(), 0, pos.x(), pos.y()))
                    # recalcule de a,b pour eviter le cas x=n
                    # la perte de la précision est negligeable dans notre cas ou l'echelle et la carte est petite
                    deg = deg + 10e-8

                elif deg == 180:
                    # self.line.append((pos.x(), self.imSize[1], pos.x(), pos.y()))
                    # recalcule de a,b pour eviter le cas x=n
                    # la perte de la précision est negligeable dans notre cas ou l'echelle et la carte est petite
                    deg = deg + 10e-8

                # calcul de la fonction de la droite
                a, b = angleToFunction(deg, (pos.x(), pos.y()))
                # print("ab", a, b)
                # test des cas pour la direction
                if deg >= 180:
                    y2 = -a * 1650 + b
                    x2 = 1650
                else:
                    y2 = a * 1650 + b
                    x2 = -1650
                    # evite l'overflow du GUI
                if y2 > 2147483647:
                    y2 = 2147483646
                elif y2 < -2147483648:
                    y2 = -2147483648

                self.fx.append((-a, b))
                self.line.append((pos.x(), pos.y(), x2, y2))

                # si 2 doites => calcul de l'intersection
                if len(self.fx) == 2:
                    # print("calcul du pt")
                    try:
                        pt = functionIntersect(*self.fx[0], *self.fx[1])
                    except:
                        QMessageBox.critical(
                            self, "Amer invalide",
                            "deux amers différents sont requis")
                        self.supprimerTraces()
                        return
                    # conversion en pixel => degree decimal
                    self.westDec = 3.0 - (pt[0] * -0.000342936)
                    self.nordDec = 47.519635 + pt[1] * -0.000232025
                    # conversion en degrée
                    nordDeg = WGS84DecToDeg(self.nordDec)
                    westDeg = WGS84DecToDeg(self.westDec)
                    self.parentClass.updateLabelsAmer(
                        "{}° {}' {}\"N".format(*nordDeg),
                        "{}° {}' {}\"W".format(*westDeg))
                    self.intersect = pt
                    self.computeAmerGPSError()

            # sinon angle invalide
            else:
                # Warning box angle invalide
                QMessageBox.critical(self, "Angle invalide",
                                     "l'angle doit être entre 0 et 360°")

        self.update()