Чтобы рассчитать пересечение усеченного конуса с лучом, я бы предложил преобразовать все точки в пространство усеченного конуса, чтобы усеченное кольцо стало ортонормированным прямоугольником, выровненным по оси, который можно использовать для быстрого поиска точки пересечения.
Итак, начните с нахождения всех точек относительно S, просто вычитая S из T.
T = T - S
Затем найдите ожидаемую позицию Т,
Tt+1 = T + Tv * dt - Sv * dt // Added the expected change for S and T
Обратите внимание, что t + 1 должен быть индексом.
Теперь представьте, что у вас есть луч между T и Tt + 1.
В любом случае, следующий шаг, преобразуйте точки луча, используя матрицу усеченного конуса (хороший пример того, как его построить, можно найти здесь в разделе замечаний).
Я не знаю, как вы определили свое усеченное тело, но не забудьте инвертировать любые повороты на вашем усеченном контуре, прежде чем преобразовать T и Tt + 1 с помощью матрицы усеченного конуса. Если ваше усеченное колесо вращается так же, как и меняющаяся скорость, поверните Tt + 1 ожидаемым вращением усеченного конуса.
Теперь проблема должна быть в ортонормированном пространстве (например, поле определено от -1 до 1 по всем осям). Вычислить точку пересечения линии с ортонормированным прямоугольником довольно просто.
В качестве альтернативы, вы могли бы просто пересечь плоскую линию с шестью сторонами усеченного конуса.
[править]
Извините, я неправильно понял ваш первоначальный вопрос.
В любом случае, что касается нахождения времени или входа на выход в усеченном контуре, вы можете только приблизить время входа и выхода Т в усеченном конусе.
Думайте о времени, когда Цель находится в Tt, как время 0, и когда Цель находится в Tt + 1 как время 1. Любая точка на отрезке линии, которая их соединяет, может быть представлена
P = Tt + Tv * t // Where t is the time, 0.0 - 1.0, and Tv is (Tt - Tt+1.
Это параметрическое уравнение для отрезка. Таким образом, если вы можете определить точку пересечения с линией и плоскостью, вы можете работать в обратном направлении и узнать t. Скажем, POI является точкой пересечения
POI // Point of intersection you calculated.
P = POI
P = Tt + Tv * t
t = (P - T) / t
Если вы находитесь здесь, вы можете приблизить время пересечения, взяв изменение во времени (dt) и умножив его на вычисленное вами значение t. Скажем, время изменения - 3 секунды, t - 0,5, затем через 1,5 секунды после того, как Цель находится в точке T, происходит пересечение. Это только приближение (как и все дискретные физические симуляции), которое становится все более и более точным, чем меньше dt. Это отвечает на ваш вопрос?