def simulate_car_movement(self, cars, aps, scatter, com_lines, mobility): # temporal variables points = [[], []] scatter.remove() nodes = cars + aps while com_lines: com_lines[0].remove() del com_lines[0] # iterate over each car for car in cars: # get all the properties of the car vel = round(np.random.uniform(car.speed[0], car.speed[1])) pos_x = car.prop[0] pos_y = car.prop[1] car.params['position'] = pos_x, pos_y, 0 car.set_pos_wmediumd(car.params['position']) angle = car.prop[2] # calculate new position of the car pos_x = pos_x + vel * cos(angle) * self.time_per_iteration pos_y = pos_y + vel * sin(angle) * self.time_per_iteration if (pos_x < car.prop[3] or pos_x > car.prop[4]) \ or (pos_y < car.prop[5] or pos_y > car.prop[6]): self.repeat(car) points[0].append(car.initial[0]) points[1].append(car.initial[1]) else: car.prop[0] = pos_x car.prop[1] = pos_y points[0].append(pos_x) points[1].append(pos_y) for node in nodes: if nodes == car: continue else: # compute to see if vehicle is in range inside = math.pow((node.prop[0] - pos_x), 2) + \ math.pow((node.prop[1] - pos_y), 2) if inside <= math.pow(node.params['range'][0], 2): if isinstance(node, AP): color = 'black' else: color = 'r' line = plot2d.line2d([pos_x, node.prop[0]], [pos_y, node.prop[1]], color=color) com_lines.append(line) plot2d.line(line) plot2d.update(car) plot2d.pause() if not mobility.thread_._keep_alive: exit() scatter = plot2d.scatter(points[0], points[1]) plot2d.draw() return [scatter, com_lines]
def simulate_car_movement(self, cars, aps, scatter, com_lines, mobility): # temporal variables points = [[], []] scatter.remove() nodes = cars + aps while com_lines: com_lines[0].remove() del com_lines[0] while mobility.pause_simulation: pass # iterate over each car for car in cars: # get all the properties of the car vel = round(np.random.uniform(car.speed[0], car.speed[1])) pos_x = car.prop[0] pos_y = car.prop[1] car.position = pos_x, pos_y, 0 car.set_pos_wmediumd(car.position) angle = car.prop[2] # calculate new position of the car pos_x = pos_x + vel * cos(angle) * self.time_per_iteration pos_y = pos_y + vel * sin(angle) * self.time_per_iteration if (pos_x < car.prop[3] or pos_x > car.prop[4]) \ or (pos_y < car.prop[5] or pos_y > car.prop[6]): self.repeat(car) points[0].append(car.initial[0]) points[1].append(car.initial[1]) else: car.prop[0] = pos_x car.prop[1] = pos_y points[0].append(pos_x) points[1].append(pos_y) for node in nodes: if nodes == car: continue else: # compute to see if vehicle is in range inside = math.pow((node.prop[0] - pos_x), 2) + \ math.pow((node.prop[1] - pos_y), 2) if inside <= math.pow(node.wintfs[0].range, 2): if isinstance(node, AP): color = 'black' else: color = 'r' line = plot2d.line2d([pos_x, node.prop[0]], [pos_y, node.prop[1]], color=color) com_lines.append(line) plot2d.line(line) plot2d.update(car) plot2d.pause() if not mobility.thread_._keep_alive: exit() scatter = plot2d.scatter(points[0], points[1]) plot2d.draw() return [scatter, com_lines]