Files
autopilot/trajectory_drawer.py
2025-09-16 21:29:26 +03:00

83 lines
3.3 KiB
Python

import matplotlib.pyplot as plt
import matplotlib.image as mpimg
from matplotlib.path import Path
import matplotlib.patches as patches
import numpy as np
class TrajectoryDrawer:
def __init__(self, image_path):
self.image_path = image_path
self.points = []
self.fig, self.ax = plt.subplots(figsize=(12, 8))
# Загрузка фонового изображения
self.img = mpimg.imread(image_path)
self.ax.imshow(self.img)
# Настройка графика
self.ax.set_title('Нарисуйте траекторию движения (кликните для точек, Enter для завершения)')
self.ax.set_xlabel('X координата')
self.ax.set_ylabel('Y координата')
# Подключение обработчиков событий
self.fig.canvas.mpl_connect('button_press_event', self.on_click)
self.fig.canvas.mpl_connect('key_press_event', self.on_key)
self.line, = self.ax.plot([], [], 'ro-', linewidth=2, markersize=6)
def on_click(self, event):
if event.inaxes == self.ax:
# Добавляем точку только если клик в области графика
x, y = event.xdata, event.ydata
self.points.append((x, y))
self.update_plot()
def on_key(self, event):
if event.key == 'enter':
self.complete_trajectory()
elif event.key == 'escape':
self.clear_trajectory()
def update_plot(self):
if self.points:
x_coords = [p[0] for p in self.points]
y_coords = [p[1] for p in self.points]
self.line.set_data(x_coords, y_coords)
self.fig.canvas.draw()
def complete_trajectory(self):
if len(self.points) > 1:
print("Траектория завершена!")
print(f"Количество точек: {len(self.points)}")
print("Координаты точек:")
for i, (x, y) in enumerate(self.points):
print(f"Точка {i+1}: ({x:.2f}, {y:.2f})")
# Можно сохранить координаты в файл
# self.save_trajectory()
self.on_complete_trajectory("GOOD")
def clear_trajectory(self):
self.points = []
self.line.set_data([], [])
self.fig.canvas.draw()
print("Траектория очищена")
def save_trajectory(self):
# Сохранение координат в файл
with open('trajectory_coordinates.txt', 'w') as f:
for i, (x, y) in enumerate(self.points):
f.write(f"{i+1},{x:.4f},{y:.4f}\n")
print("Координаты сохранены в trajectory_coordinates.txt")
def show(self):
plt.tight_layout()
plt.show()
# Использование
if __name__ == "__main__":
# Укажите путь к вашему изображению
image_path = "map.jpg" # Замените на путь к вашему изображению
drawer = TrajectoryDrawer(image_path)
drawer.show()