Переход от табличного задания _изменений_ матриц/списков смежности к аналитическому для вычисления промежуточных состояний - как осуществить?
Если что-то типа "не сильно менять матрицу за шаг", то можно попробовать алгоритмы сортировки.
Грубо говоря, ставим веса по порядку в целевой матрице и начинаем сортировку пузырьком. За каждый шаг там только одна пара (причем соседняя) меняется.
Аналитически, наверное, можно посчитать только для простых объектов.
т.е. менять один элемент за раз не вариант, т.к. из N объектов сразу несколько в пространстве конфигурацию меняют (как бы "атомарно") и соответственно матрица на конец итерации вся пересчитывается и уже передаётся в "решалку".
есть эмуляция физ.объекта (о ней речь) и отдельно "решалка" (автомат обычный), которая понимает по adjscency какое конечное состояние достигнуто и выполняет некие действия (ок, проговорюсь тут немного) с поверхностью всего объекта или его части.
хотя... более атомарные действия... возможно и вариант, спасибо! :)
p.s. ок, проговорюсь ещё: stealth tank в command&conquer видели? :)) ну вот он корпус/башню повернул и должен пересчитать что врагам показывать на своих боках.
ну т.е. там если "языком домохозяек" мне надо "при воздействии переставлять элементы по индексам (понять каким) местами" - вопрос по каким индексам (как-то формализовать) и можно ли это формулой делать (и главное как к этой формуле/формулам привести)
т.е. для 8 элементов я эти перестановки подобрал вручную, но если элементов будет 100, то боюсь я годами буду подбирать какие индексы в матрице менять с какими :)))
просто думал вдруг моя "проблема" в мире проблемой давно не является и мне дадут ссылку на алгоритм уже давно изобретёный (конечно же я не ожидал что кто-то тут будет думать за меня, скорее ожидал что поржут над "вот проблемища то!..." да кинут в меня ссылкой на общеизвестный алгоритм) ...
А так вроде даже на хабре были статьи типа "пишем свой 3д движок".
девел0пер писал(а)
Или, допустим, мы имеем:
{0,1,2,3,4,5,6,7}
и хотим получить все промежуточные шаги для перехода в:
{3,4,1,0,5,6,4,7}
с помощью некой формулы.
можно ли задачу в такой постановке свести к преобразованию между двумя облаками точек?
если да - то есть исп - en.wikipedia.org/wiki/Iterative_closest_point
на вход два облака точек,
на выходе вектор сдвига и матрица поворота
девел0пер писал(а)
Важный момент: эта штука должна быть 100% детерминированной, конечной, т.е. "брутфорс рулит!", "посчитать генетическими алгоритмами!" (за хз какое время и хз с какой вероятностью успеха) и т.п. не подходят, увы.
Вопрос: есть ли какие-то формальные способы (чем проще тем лучше, я не вот прям математик) как перейти от табличного задания (хотя бы тот простой пример выше) к аналитическому?
Вообще говоря любые дискретные операции задаются таблицами истинности. А насколько я понимаю, речь как раз идет о дискретной аналитике. Соответственно, любое аналитическое выражение подразумевает наличие этих таблиц истинности или соответствия элементов во множествах.
И получается что вы хотите рассмотреть задачу с точки зрения оптимизации способа записи ее решения , то есть как записать решение задачи максимально коротко. Для этого обычно вводятся понятие и, соответственно, обозначение некоторой операции которая все равно задана таблицей.
Все процессоры поддерживают примерно одинаковый набор таких операций в виде инструкций ассемблера,
А вот видеокарты (например) или ПЛИС-микросхемы, позволяют конструировать более широкий класс дискретных операций. То есть есть разные устройства которые реализуют готовые дискретные операции, соответственно для этих операций не надо хранить таблицы.
Соответственно любая аналитика здесь должна быть основана на возможностях выбранной аппаратной платформы, ну и задачу (или класс задач) нужно все таки сформулировать с необходимой степенью полноты.
Ну а вы пытаетесь сформулировать задачу совершенно оторванную от реальности, в этом ваша ошибка, мне кажется!
да, не так удобно как adjacency, увы, в итоге придётся небольшое API написать на "взятие", зато с shift'ом при вращении (а я SW эмулирую набор HW объектов) - никаких головоломок (ну почти) :)))