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)
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()