Я пишу игру на Python (с pygame), которая требует от меня генерировать случайное, но приятное "море" для каждой новой игры. После длительного поиска я остановился на алгоритме, который включает кривые Безье, как определено в padlib.py. Теперь мне нужно выяснить, когда кривые, создаваемые padlib, пересекают сегмент линии.
Метод грубой силы должен просто использовать набор приближающих сегментов линии, созданных padlib, чтобы найти ответ. Однако я подозреваю, что лучший ответ можно найти аналитически. У меня всего несколько десятков сегментов сплайнов - их поиск должен быть быстрее тысячи сегментов линии.
Небольшой поиск повел меня по этой дороге: Безье → Kochanek-Bartels Spline → Кубический сплав Hermite
На последней странице я нашел эту функцию:
p (t) = h 00 (t) p 0 + h 10 (t) m 0 + h 01 (t) p 1 + h 11 (t) m 1
где p (t) - фактически точка (двумерный вектор), h ij (t) - кубические полиномы, p 0, p 1, m 0 и m 1 - это точки, которые я могу получить из кода padlib.
Теперь я вижу, что решение моей проблемы - это p (t) = u + v * t 1, где u и v - это конец моего сегмента линии.
Однако разработка аналитического решения вне меня. Кто-нибудь знает о существующем решении? Или может помочь мне с решением уравнений?