Я работаю с Python/numpy/scipy, чтобы написать небольшой трассировщик лучей. Поверхности моделируются как двумерные функции, дающие высоту над нормальной плоскостью. Я уменьшил задачу нахождения точки пересечения луча и поверхности с нахождением корня функции с одной переменной. Функции непрерывны и непрерывно дифференцируемы.
Есть ли способ сделать это более эффективно, чем просто цикл по всем функциям, используя scipy root finders (и, возможно, используя несколько процессов)?
Изменить: функции представляют собой разницу между линейной функцией, представляющей луч, и функцией поверхности, ограниченной плоскостью пересечения.