def display_cars(self, cars): car_lines = [] for n in range(0, len(cars)): car_lines.append(self.road[n]) for n in range(0, len(self.totalRoads)): road = self.road[n] line_data = road.get_data() x_min, x_max = self.lineX(line_data) y_min, y_max = self.lineY(line_data) locX = (x_max - x_min) / 2 + x_min locY = (y_max - y_min) / 2 + y_min plot2d.plotLineTxt(locX, locY, n + 1) # temporal variable to hold values of cars points = [[], []] # get X cars in the graph i = 0 for car in cars: i += 1 random_index = randrange(len(car_lines)) car.currentRoad = int(random_index) car_line = car_lines[random_index] point = car_line.get_xydata()[0] # first point in the graph # calculate the angle line_data = car_line.get_data() ang = self.calculateAngle(line_data) car.prop = self.carProp(point, ang, x_min, x_max, y_min, y_max) # for the even cars shift angle to negative # so that it goes in opposite direction from car1 car.i = i if i % 2 == 0: ang = ang + math.pi # for this car get the last point as positions point = car_line.get_xydata()[-1] x_min, x_max = self.lineX(line_data) y_min, y_max = self.lineY(line_data) car.initial = self.carPoint(point) # add scatter points[0].append(point[0]) points[1].append(point[1]) self.speed(car) # Get Speed # plot cars self.scatter = plot2d.plotScatter(points[0], points[1])
def display_grid(self, baseStations, conn, nroads): for n in range(nroads): if n == 0: p = ginp(2) self.points[n] = p self.all_points = p else: p = ginp(1) self.points[n] = p self.all_points.append(p[0]) x1 = [x[0] for x in self.points[n]] y1 = [x[1] for x in self.points[n]] if n == 0: # Get all the points in the line self.points[n] = self.get_line(int(x1[0]), int(y1[0]), int(x1[1]), int(y1[1])) else: self.points[n] = self.get_line(int(self.all_points[n][0]), int(self.all_points[n][1]), int(p[0][0]), int(p[0][1])) x1 = [x[0] for x in self.points[n]] y1 = [x[1] for x in self.points[n]] self.interX[n] = x1 self.interY[n] = y1 # Create a line object with the x y values of the points in a line self.road[n] = plot2d.plotLine2d(x1, y1, color='g') plot2d.plotLine(self.road[n]) for bs in baseStations: bs.prop = ginp(1)[0] bs_x = '%.2f' % bs.prop[0] bs_y = '%.2f' % bs.prop[1] self.scatter = plot2d.plotScatter(float(bs_x), float(bs_y)) bs.params['position'] = bs_x, bs_y, 0 bs.set_pos_wmediumd() plot2d.instantiateNode(bs) plot2d.instantiateAnnotate(bs) plot2d.instantiateCircle(bs) plot2d.text(bs) plot2d.circle(bs) plot2d.plotDraw() sleep(1) if 'src' in conn: for c in range(0, len(conn['src'])): line = plot2d.plotLine2d([conn['src'][c].params['position'][0], conn['dst'][c].params['position'][0]], \ [conn['src'][c].params['position'][1], conn['dst'][c].params['position'][1]], 'b', ls='dashed') plot2d.plotLine(line)
def simulate_car_movement(self, cars, baseStations, scatter, com_lines, mobility): # temporal variables points = [[], []] scatter.remove() nodes = cars + baseStations 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() 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.plotLine2d([pos_x, node.prop[0]], [pos_y, node.prop[1]], color=color) com_lines.append(line) plot2d.plotLine(line) plot2d.graphUpdate(car) eval(mobility.continuePlot) scatter = plot2d.plotScatter(points[0], points[1]) plot2d.plotDraw() return [scatter, com_lines]