Многоугольники не слишком большие (обычно 4-8 граней на многоугольник), но их много.
Я не знаю, есть ли более быстрое решение, чемO (n ^ 2), но для n <= 8
это не будет иметь значения.Если n = 8
, вам просто нужно проверить 20 диагоналей (8 * 5 / 2
).Это не такой уж большой множитель, и любой сложный алгоритм, вероятно, будет иметь большие вычислительные затраты (структуры данных, сложные циклы и проверки).
Одна вещь, которую вы можете сделать, чтобы ускорить его, - этовыбросить квадратный корень в формулу расстояния между двумя точками.Сначала найдите мин / макс (xi-xj)*(xi-xj) + (yi-yj)*(yi-yj)
, затем примените квадратный корень.Это довольно дорогая операция, и выполнение ее 2 раза вместо 20 может иметь значение.