А можно спросить, какова постановка задачи ? Я читал тему, и как-то плохо понятно. Я догадываюсь, что это две молекулы (если правильно догадываюсь), но в чем задача математически ? (Впрочем, в том, что напишу что-то полезное, отнюдь не уверен).
Верно ли, что речь идет о следующем. Есть две поверхности

и

в

, и на них заданы две функции

,

. Рассматриваются все движения

такие, что

. Для каждого такого

находятся две точки

,

, реализующие минимум
расстояния между

и

, и рассматривается величина

, где

--- некоторая функция, вид которой сейчас еще не известен. Требуется минимизировать эту величину, по всем допустимым

.
Я к сожалению не совсем математик, но в целом похоже на правду. Я только не понимаю, что вы подразумеваете под

, ведь из моих предыдущих сообщений видно что эта "h" должна зависеть от всех релевантных (находящихся достаточно близко) пар точек, а не от какой-то одной конкретной пары.
-- Ср ноя 28, 2018 03:18:07 --Слишком неточно получится, поверхности очень уж далеки от идеала.
Тогда уточняйте огибающую разбивая её на меньшие фигуры, а дальше опять - просто с какой стороны плоскости находится точка. Вообще софт для 3D моделирования уже имеет встроенные алгоритмы выявления пересечений, но там ведь всё вручную, то есть далеко не везде есть макроязык и возможность писать вменяемые программы.
Можно аппроксимировать поверхности шарами, что упростит нахождение пересечений - просто расстояние от центра шара должно быть больше радиуса, и так для всех шаров (эллипсоидов, но эту уже сложнее).
Я не представляю как это сделать быстро в случае если у каждой поверхности по 30 тысяч точек. И тут ничем пренебречь нельзя, т.к. форма у поверхностей произвольная.
Нужно просто привыкнуть к большим числам. И да, ждать завершения перебора тоже можно долго, значит и терпение нужно.
И как перевести в код вашу идею с поворотами?
Задаёте произвольную ось для одной из поверхностей, но проходящую через экстремум. Далее крутите эту ось в телесном угле вокруг точки фиксации экстремума. Затем по положению оси восстанавливаете всю фигуру.
Опять-таки после поворота может получиться что придется снова смещать, а после смещения снова поворачивать и постоянно проверять не произошло ли наложение.
Да, в этом суть итеративных алгоритмов.
Общее решение я предложить не могу. Оно конечно найдёт наилучший вариант (если само решение кто-то найдёт), но этот наилучший вариант будет всего процентов на 10 лучше итеративно подобранного. Так что в вашем случае - либо ждать чудесного общего решения, либо взять и сделать на 90% оптимальное решение.
-- 26.11.2018, 21:21 --Для каждого такого

находятся две точки

,

, реализующие минимум
расстояния между

и

Как я понял, автору нужно не две точки, а все сразу. То есть точки взаимодействуют по типу каждая с каждой. А две точки - это лишь произвольно выбранные места привязки. Как вариант устранения произвола предложен выбор экстремумов.
-- 26.11.2018, 21:23 --можно не проверять наложение каждый раз, оно автоматом будет исключено в процессе оптимизации положения, потому что энергия по мере погружения будет снова уменьшаться (точки расходятся и расстояние увеличивается, при высокой степени это пересилит уменьшение расстояния для других точек).
А расходятся ли точки?
Для выявления пересечений наверное лучше и правда использовать "блендер". Мне это кажется слишком сложной задачей (по крайней мере если все делать серьезно и максимально точно) чтобы решать её самому с нуля.
Надо будет попробовать создать тестировные примерчики где точек поменьше раз эдак в 50-100, а потом уже применить готовое решение к основной задаче.
Я всеми конечностями за итеративную оптимизацию. Просто я честно не могу себе представить последствия вращений, чисто интуитивно мне кажется что из-за них ни о какой сходимости можно и не мечтать.
-- Ср ноя 28, 2018 03:20:06 --А расходятся ли точки?
При высокой степени расстояния в знаменателе сначала две точки сблизятся, а при дальнейшем движении (в том числе вглубь фигур) они станут удаляться - и энергия уменьшаться. Т.е. алгоритм по любому не даст ближайшим точкам пройти внутрь фигуры.
Вот что будет потом, когда допустимыми останутся лишь вращения вокруг этой точки - вопрос, да.
И ведь правда! Надеюсь что так оно и будет. Это здорово сэкономило бы время расчета.
-- Ср ноя 28, 2018 03:21:09 --Фигуры ведь не обязательно выпуклые?
К сожалению нет, я думаю это видно из картинок. Там совсем безумные неправильные формы.