@Oleg_Programist

Как узнать место пересечения луча со сферой?

Нужна функция, которая возвращает координаты столкновения луча со сферой, она принимает такие значения как:
позиция камеры, направление луча, позиция сферы и радиус сферы, желательно написанная на c++.
  • Вопрос задан
  • 133 просмотра
Решения вопроса 1
wataru
@wataru Куратор тега Математика
Разработчик на С++, экс-олимпиадник.
Тривиально: парметризуйте луч, подставьте в уравнение сферы, решите получившееся квадратное уравнение.

Луч:
x = x0 + t*vx
y = y0 + t*vy    (1)
z = z0 + t*zy

Где (x0,y0,z0) - начало луча (камера?), (vx, vy, vz) - направление луча.

Уравнение сферы:
(x-xs)**2 + (y-ys)**2 + (z-zs)**2 = R**2 (2)

Где (xs, ys, zs) -центр сферы, R - радиус.

Подставьте (1) в (2) - получите квадратное уравнение на t. Решите его по школьной формуле и возьмите минимальное положительное t. Подставьте в (1) и получите координаты точки пересечения (и заодно длину луча, если вектор направления нормализован).
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@mayton2019
Bigdata Engineer
Мне нужна функция которая возвращает координаты столкновения луча со сферой

Сразу замечание. Давайте перечислим ситуации которые могут быть.

1) Луч пересекает сферу в 1 точке (касательная). Или луч испускается изнутри сферы.
2) Луч пронизывает сферу в 2 точках (наиболе общий кейс)
3) Луч не попал в сферу.

Наша функция (какая-бы она не была) должна возвращать 3 типа этих результатов. Или просто список от 0 до 2х векторов в пространстве (x,y,z). Я-бы предпочел перечисление из 3х типов результатов. Мне кажется что это достаточно важно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы