Как узнать пересекает ли линия сферу в трёхмерном пространстве

Подскажите пожалуйста алгоритмы вычисления пересечения сферы отрезком в 3D пространстве. У меня есть вектор начала линии, вектор конца линии. Есть вектор положения сферы и её радиус. Как можно узнать пересекает ли линия сферу?


Ответы (1 шт):

Автор решения: Harry

Если расстояния до точек A и B от центра оба меньше радиуса - весь отрезок внутри сферы.

Если одно меньше, второе больше - точно пересекает :)

А вот если оба больше...

Для начала сместим все координаты так, чтоб центр сферы был в начале координат.

Отрезок параметрически задается как

введите сюда описание изображения

Расстояния от точек отрезка до начала координат

введите сюда описание изображения

Простейшая квадратичная функция от t. Ищем минимум. Если минимум достигается при 0<=t<=1, смотрим на его величину и сравниваем с радиусом (точнее, с квадратом радиуса) сферы. Если меньше - все, пересечение есть. Если больше - пересечения нет. Если минимум за искомыми границами [0,1] - пересечения нет.

Как найти минимум от квадратичной функции или скалярно вектора перемножить, надеюсь, знаете...

→ Ссылка