plotting.py 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. import matplotlib.pyplot as plt
  2. import matplotlib.patches as patches
  3. import env
  4. class Plotting:
  5. def __init__(self, xI, xG):
  6. self.xI, self.xG = xI, xG
  7. self.env = env.Env()
  8. self.obs_bound = self.env.obs_boundary
  9. self.obs_circle = self.env.obs
  10. def animation(self, nodelist, path):
  11. if path is None:
  12. print("No path found!")
  13. return
  14. self.plot_visited(nodelist)
  15. self.plot_path(path)
  16. def plot_grid(self, name):
  17. fig, ax = plt.subplots()
  18. for x in self.obs_bound:
  19. ax.add_patch(
  20. patches.Rectangle(
  21. (x[0], x[1]), x[2], x[3],
  22. edgecolor='black',
  23. facecolor='black',
  24. fill=True
  25. )
  26. )
  27. for x in self.obs_circle:
  28. ax.add_patch(
  29. patches.Circle(
  30. (x[0], x[1]), x[2],
  31. edgecolor='black',
  32. facecolor='gray',
  33. fill=True
  34. )
  35. )
  36. plt.plot(self.xI[0], self.xI[1], "bs", linewidth=3)
  37. plt.plot(self.xG[0], self.xG[1], "gs", linewidth=3)
  38. plt.title(name)
  39. plt.axis("equal")
  40. @staticmethod
  41. def plot_visited(nodelist):
  42. for node in nodelist:
  43. if node.parent:
  44. plt.plot(node.path_x, node.path_y, "-g")
  45. plt.gcf().canvas.mpl_connect('key_release_event',
  46. lambda event: [exit(0) if event.key == 'escape' else None])
  47. plt.pause(0.001)
  48. @staticmethod
  49. def plot_path(path):
  50. plt.plot([x[0] for x in path], [x[1] for x in path], '-r', linewidth=2)
  51. plt.pause(0.01)
  52. plt.show()