Напиши код для нахождения суммы координат х и y ве...
Criado em: 26 de novembro de 2025
Respondido usando GPT-5.1 Thinking por Chat01
Criado em: 26 de novembro de 2025
Respondido usando GPT-5.1 Thinking por Chat01
Напиши код для нахождения суммы координат х и y вектора, полученного путем сложения стрелок (векторов), расположенных на входном изображении Python
Вот один из рабочих вариантов на Python, в зависимости от того, откуда берутся координаты.
Пусть каждая стрелка задаётся как 4 числа:
(x1, y1, x2, y2) — начало и конец вектора на картинке.
Тогда сумма векторов считается так:
python# список стрелок: (x1, y1, x2, y2) arrows = [ (10, 20, 50, 20), # первая стрелка (50, 20, 50, 60), # вторая стрелка (50, 60, 90, 40), # третья стрелка # добавляйте свои ] def sum_vectors(arrows): sum_x = 0 sum_y = 0 for x1, y1, x2, y2 in arrows: # вектор как разность конечной и начальной точки dx = x2 - x1 dy = y2 - y1 sum_x += dx sum_y += dy return sum_x, sum_y result_x, result_y = sum_vectors(arrows) print(f"Сумма координат результирующего вектора: X = {result_x}, Y = {result_y}")
Если ты работаешь в «математической» системе координат (ось Y вверх),
а координаты взяты с изображения (там Y вниз), то просто инвертируй dy:
pythondy = -(y2 - y1)
Это уже задача компьютерного зрения. Ниже — стартовый пример с OpenCV, который:
pythonimport cv2 import numpy as np # 1. Загрузка изображения image_path = "vectors.png" # путь к изображению со стрелками img = cv2.imread(image_path) if img is None: raise FileNotFoundError(f"Не удалось открыть файл {image_path}") gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 2. Немного сгладим и найдём границы blur = cv2.GaussianBlur(gray, (5, 5), 0) edges = cv2.Canny(blur, 50, 150, apertureSize=3) # 3. Поиск отрезков (как стрелок) методом Хафа lines = cv2.HoughLinesP( edges, rho=1, theta=np.pi / 180, threshold=80, minLineLength=40, # минимальная длина отрезка (подбирается под картинку) maxLineGap=10 ) vectors = [] if lines is not None: for line in lines: x1, y1, x2, y2 = line[0] # длина отрезка (чтобы отсечь слишком короткие линии — шум, наконечник стрелки и т.п.) length = np.hypot(x2 - x1, y2 - y1) if length < 30: # порог тоже подбирается continue # вектор в координатах изображения dx_screen = x2 - x1 dy_screen = y2 - y1 # Переводим в "математическую" систему координат: Y вверх dx = dx_screen dy = -dy_screen vectors.append((dx, dy)) # 4. Суммируем все найденные векторы sum_x = sum(v[0] for v in vectors) sum_y = sum(v[1] for v in vectors) print("Найденные векторы (dx, dy):") for v in vectors: print(v) print(f"\nСумма координат результирующего вектора: X = {sum_x}, Y = {sum_y}")
💡 Важно:
minLineLength, maxLineGap, threshold надо подбирать под конкретное изображение.Если покажешь пример своей картинки или формат входных данных, могу адаптировать код под твою ситуацию.