Есть такая возможность ускорить вычисление
. Рассмотрим функции от
и
:
Тогда легко видеть, что
(следует учесть, что
. Это подсказывает такой путь: затабулировать
,
достаточно
плотно по
, а потом пользоваться указанными соотношениями (интерполируя
и
из близлежащих затабулированных точек). Тогда вычисление
будет требовать не миллиарда операций, а порядка ста тысяч.
Реализовал вашу идею с сетками. Попробую описать в двумерном виде как я выбирал интервалы, благо принцип тот же:
Вокруг обоих тел рисуется по ящику (мин./макс.
), затем ищутся их диагонали. Диагональ первого ящика прибавляется со всех сторон ко второму, а диагональ второго ящика со всех сторон к первому.
И затем уже для этих внешних ящиков табулируются
(вокруг первого расширенного диагоналями второго) и
(вокруг второго расширенного диагоналями первого).
По идее этих границ должно быть более чем достаточно.
Однако теперь единственная проблема это найти
, я не понимаю как это сделать для поворотов.
Допустим второе тело вращается вокруг оси
на 180 градусов, не своей какой-то центральной оси, а обычной, общей, если можно так выразиться. А затем смещается в угол ящика для
.
Возможно ли для этой ситуации найти
для первого тела? Если тупо повернуть на -180 вокруг общей оси
и затем вычесть тот же вектор смещения который прибавялся ко второму телу, в ящик для
я не попадаю. Также попробовал транспонировать матрицу поворота и потом тоже вычесть вектор смещения - снова не попал.
Я предполагаю что это невозможно и вращать надо вокруг собственных осей и тогда все сойдется. Но как их правильно найти?