Top.Mail.Ru
Ответы

Решите задачу на питоне срочно

Капитан Джек Воробей и его команда путешествуют на Черной Жемчужине по Карибскому морю. Чтобы найти корабль-призрак, им нужно попасть в проклятый многоугольник. Известна текущая координата корабля и координаты вершин многоугольника. Помогите Джеку определить, на месте ли они. Входные данные Координата Черной Жемчужины x,y, Координаты точек проклятого многоугольника Выходные данные YES – если корабль в многоугольнике NO – если нет

По дате
По рейтингу
Аватар пользователя
Мастер
12345678910111213141516171819202122232425262728
 def is_ship_in_polygon(ship_coords, polygon_coords): 
    # Распаковываем координаты корабля 
    ship_x, ship_y = ship_coords 
 
    # Инициализируем переменную для подсчета пересечений 
    intersect_count = 0 
 
    # Перебираем пары вершин многоугольника 
    for i in range(len(polygon_coords)): 
        vertex1_x, vertex1_y = polygon_coords[i] 
        vertex2_x, vertex2_y = polygon_coords[(i + 1) % len(polygon_coords)] 
 
        # Проверяем, пересекается ли отрезок многоугольника с горизонтальной линией корабля 
        if ((vertex1_y > ship_y) != (vertex2_y > ship_y)) and (ship_x < (vertex2_x - vertex1_x) * (ship_y - vertex1_y) / (vertex2_y - vertex1_y) + vertex1_x): 
            intersect_count += 1 
 
    # Если количество пересечений нечетное, корабль внутри многоугольника 
    if intersect_count % 2 == 1: 
        return "YES" 
    else: 
        return "NO" 
 
# Пример использования 
ship_coords = (3, 4) 
polygon_coords = [(1, 1), (2, 3), (4, 2), (3, 0)] 
 
result = is_ship_in_polygon(ship_coords, polygon_coords) 
print(result)