Пересечение динамических объектов между усечением и точкой - PullRequest
0 голосов
/ 01 сентября 2011

В настоящее время я пытаюсь разработать радар для целей моделирования отдельных событий.Предположим, у меня есть 2 объекта Sensor S и Target T, которые просто являются точками на экране.S оборудован Frustum, основанным на определенных параметрах, таких как расстояние восприятия, угол, отношение и т. Д. Эту часть мне уже удалось разработать.Чтобы поместить вещи в перспективу, Frustum начинается с точки S, и и S, и T будут перемещаться случайным образом.Идея состоит в том, чтобы S мог обнаруживать T с дискретных шагов.Так как S и T были запрограммированы для линейного перемещения, дискретные шаги в этом случае относятся ко времени, когда любой объект меняет направление в своем движении.

Мой вопрос теперь, учитывая координаты x, y, z и скоростькак S и T на каждом дискретном шаге, как я могу предсказать время обнаружения (то есть пересечения) между усечением S и точкой T, если таковые имеются?Мой код в настоящее время может только определить, находится ли точка в пределах Frustum или нет.Но это полезно, только если я делаю непрерывное моделирование времениЯ не уверен относительно того, как мне следует вычислять пересечение между лучом и шестью плоскостями, составляющими усеченный конус, с учетом скоростей S и T. В некоторых статьях в Интернете упоминается, что для пересечений динамических объектов общим принципом является рассмотрениетолько один объект должен двигаться перед решением уравнений для моментов времени t1 и t2 (то есть относительного времени входа и выхода).Однако, похоже, это не работает для меня.

Пожалуйста, сообщите.Спасибо!

1 Ответ

1 голос
/ 01 сентября 2011

Чтобы рассчитать пересечение усеченного конуса с лучом, я бы предложил преобразовать все точки в пространство усеченного конуса, чтобы усеченное кольцо стало ортонормированным прямоугольником, выровненным по оси, который можно использовать для быстрого поиска точки пересечения.

Итак, начните с нахождения всех точек относительно 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. Это отвечает на ваш вопрос?

...