def simulateMovement(self, x, y, nextAngle, direction): ligne = Ligne("", self.x, self.y, x, y, "purple") # simulate movement movingAngle = self.normalizeAngle(ligne.getAngle() + (180 if direction < 0 else 0)) x = 0 y = 0 for p in range(0, (int)(ligne.getlongeur())): ratio = (1.0 / ligne.getlongeur()) * p ratioDest = 1 - ratio x = ligne.x1 * ratioDest + ligne.x2 * ratio y = ligne.y1 * ratioDest + ligne.y2 * ratio self.setPosition(x, y, movingAngle, direction) if webInterface.instance and webInterface.instance.runningState == RunningState.STOP: return False if type(self.collisionDetected) != bool: collisionX, collisionY = self.collisionDetected print "\t \t Obstacle, stopping robot" errorObstacle = True break elif self.collisionDetected: print "\t \t Obstacle, stopping robot" errorObstacle = True break time.sleep(self.simulationSpeed) self.setPosition(x, y, nextAngle, 0)
def simulateMovement(self, x, y, nextAngle, direction): ligne = Ligne("", self.x, self.y, x, y, "purple") # simulate movement movingAngle = self.normalizeAngle(ligne.getAngle() + (180 if direction < 0 else 0)) for p in range(0, (int)(ligne.getlongeur())): ratio = (1.0 / ligne.getlongeur()) * p ratioDest = 1 - ratio self.setPosition(ligne.x1 * ratioDest + ligne.x2 * ratio, ligne.y1 * ratioDest + ligne.y2 * ratio, movingAngle) if webInterface.instance and webInterface.instance.runningState == RunningState.STOP: return False time.sleep(self.simulationSpeed) self.setPosition(ligne.x2, ligne.y2, nextAngle)
def eviterObstacle(self, absoluteObstacleAngle, direction=1): print("\t \tEscape from A=" + str(absoluteObstacleAngle)) #Get opposed angle if absoluteObstacleAngle > 0: newAngle = absoluteObstacleAngle - 180 else: newAngle = absoluteObstacleAngle + 180 #newAngle = absoluteObstacleAngle xprev = self.x yprev = self.y newx = xprev + 300 * math.cos(newAngle * 0.0174532925) #rad newy = yprev + 300 * math.sin(newAngle * 0.0174532925) #rad ligne = Ligne("", xprev, yprev, newx, newy, "purple") distance = -1 * direction * ligne.getlongeur() #self.aveugler() time.sleep(0.2) self.seDeplacerDistanceAngle(distance, 0, 0.4, 0) time.sleep(0.2) #self.rendreVue() time.sleep(0.2) return True #search for a free opposed movment """escapePointInteretList = list(self.listPointInteret) escapeObstacles = self.chercher.pointContenuListe(xprev, yprev, escapePointInteretList) for elem in escapeObstacles: escapePointInteretList.remove(elem) for size in [400, 300, 250]: for a in range(0, 41, 10): for side in [-1, 1]: lineTest = Ligne("", xprev, yprev, newx, newy, "purple") lineTest.resize(size) testAngle = lineTest.getAngle()+a*side lineTest.rotate(lineTest.getAngle()+a*side) if not self.chercher.enCollisionCarte(lineTest, escapePointInteretList): print("\t \tFound collision escape") print("\t \tEscape angle=" + str(lineTest.getAngle())) distance = -1*direction*lineTest.getlongeur() angleToDo = self.getAngleToDo(lineTest.getAngle()) if angleToDo>0: angleToDo-=180 else: angleToDo+=180 self.seDeplacerDistanceAngle(distance, angleToDo, 0.2, 0) return True elif (self.fenetre): lineTest.dessiner(self.fenetre) self.fenetre.win.redraw()""" return False
def extendLinePoint(self, forme, x, y): ligne = Ligne("", forme.x, forme.y, x, y) ligne.resize(ligne.getlongeur() + 30) point = {"x": ligne.x2, "y": ligne.y2} return point