Просто идея:
- Нарисуйте прямую линию в качестве первого отрезка.
- Проверьте, попадает ли какой-либо отрезок в прямоугольник.(Если нет, значит, все готово.)
- Если это так, замените отрезок линии двумя отрезками, которые идут ближе к двум углам прямоугольника, что означает обход вокруг него.
- Повторите с шагом 2.
Здесь вы можете увидеть три итерации (красный → зеленый → синий) этого процесса.
Конечно, это всего лишь грубая идея о том, как начать.Он не будет работать для пересекающихся прямоугольников (спасибо, @sneftel) или для прямоугольников, которые не полностью находятся внутри области, и он также не обязательно найдет оптимальное решение в простых случаях.
Чтобы получитьоптимальный путь, я думаю, единственный вариант - это пройти через все возможные комбинации углов прямоугольника (с некоторыми возможными оптимизациями).