Как замена топологии пространства отменит требование проверять столкновение каждого тела с каждым?! Как?! Да, здесь можно много наоптимизировать, но уйти от самой квадратичной зависимости - нет. И сложность расчёта кажого столкновения на квадратичную зависимость никак не влияет.
Понятия не имею как :) Я начинал размышления с упрощенной задачи: нахождение наименьшего расстояния не между линиями, а между точками в
. Я знаю, что быстрый способ поиска из большого объема данных это индексация (сортировка в БД), но сейчас разработаны только полноценные методы индексации для одномерных массивов, а у меня координаты точек это четырехмерный массив.
. Каждую компоненту координат можно отсортировать, и далее, брать самые меленькие значения, относительно координат заданной точки, и делать расчеты начиная с них, получая квадраты расстояний, квадратный корень при этом не извлекать, хранить и сравнивать квадраты расстояний. Тогда не надо проверять каждый с каждым. К примеру, надо найти самые близкие точки к точке
, тогда по индексированным массивам можно быстро брать самые близкие компоненты координат других точек к точке
, чем они ближе, чем меньше квадрат их разности, и тем меньше суммы квадратов (квадрат расстояния), и тем меньше расстояние между точками.
Далее я начал думать как это сделать для прямых, поскольку для динамики можно описать траектории движения всех частиц(тел) в инерциальной системе отсчета через смешанное и векторное произведение, но отмёл этот вариант, поскольку реальные системы не инерциальны, и даже если бы я такое сделал, то это не имело бы смысла.
Затем я пытался описать движение в неинерциальной системе отсчета. На меня когда то произвело впечатление тот факт что кривизна геодезической для мяча, пули, луча света одна и таже, как круг повернутый под разным углом может выглядеть как эллипс или как прямая (если взять очень маленькую часть окружности). И я подумал, что можно описать траектории всех тел и света (проекции изображения на экран) одними и теми же "окружностями". Понятно, что радиус кривизны зависит от расстояние до центра, но мне надо было сделать примерно и только для области от поверхности Земли до скажет 10 км в высоту, и разницей в кривизне я думал пока пренебречь. Вот поэтому я подумал, почему бы не описать геометрию через пространства с топологией сферы или скажем через гиперсферу (с внутренней размерностью 4) в
, лишь бы это что-то дало:) Как я представлял, а таком "мире" всё двигается только по окружностям одного радиуса лежащими на 4-х мерной сфере. Остается только так проиндексировать эти окружности (их параметры), чтобы быстро находить какие могут быть ближе друг к другу. Такие окружности на 2-сфере будут всегда пересекаться, на 3-сфере могут скрещиваться и поэтому расстояние между ними можно описать как туже сумму квадратов разницы углов поворота этих окружностей (геодезических) относительно какого-та базиса, и вроде тоже самое для 4-гиперсферы в
- это будут углы повороты базисной пятерки векторов, хотя хотелось бы всё рассматривать без привлечения пятого измерения..
Пока что на этом всё, мне не хватает математических знаний, чтобы что-то тут реализовать, поскольку очень много вариантов, а где может выйти польза я не понимаю, я же программист, а не математик:). Если кому то интересно эта тема - пишите мне. (Я из Питера)