Мне нужно решить относительно простую вещь - у меня есть n-вершинный выпуклый 2D-многоугольник и горизонтальная (!) линия с некоторой координатой 'y'. Мне нужно только одно: проверить, пересекается ли многоугольник с этой линией (т.е. имеет 2 пересечения) или нет.
Самое быстрое, что я могу придумать, это найти минимальные/максимальные координаты y внутри полигона (цикл повторяется n раз с двумя сравнениями и двумя сохранениями), а затем сравнить, если min y ‹= y ‹ max y.
Почему-то мне кажется, что это можно решить более «математически», но я всегда заканчиваю более медленным кодом (например, векторным способом - мне нужно вычислить различия для n [i] и n [i + 1], затем умножить их, добавить и т. д. - - гораздо медленнее, чем 2 cmps+stores).