Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Ошибка вычисления поворотов объекта вокруг осей (3 стр)

Ошибка вычисления поворотов объекта вокруг осей (3 стр)

Страницы: 1 2 3 4 Следующая »
IsaevПостоялецwww11 июля 201814:35#30
> }:+()___ [Smile] c 17 по 22 понятно, просто развороты на +/- 90 вокруг осей, это которые я использовал можно сказать, но их не хватило.
23 - нулевой, без поворота. А положение остальных очень приблизительно понятны. Визуально бы их увидеть все, чтобы понимать какой для какой ситуации какой индекс инициализировать
Оси то вообще как расположены, так?
Изображение

Правка: 11 июля 2018 15:17

}:+()___ [Smile]Постоялецwww11 июля 201815:42#31
Isaev
> А положение остальных очень приблизительно понятны. Визуально бы их увидеть все, чтобы понимать какой для какой ситуации инициализировать
Лучше прокачать теорию кватернионов. Ориентации в списке — это всевозможные различные комбинации поворотов на 90° вокруг осей.
Я его сгенерировал автоматически, последовательно применяя повороты на 90°.

Но если так уж интересно, то там:
- одна тривиальная ориентация (w = 1);
- повороты вокруг осей X, Y, Z на углы ±90° (w = 0.707) и 180° (w = 0);
- повороты на 180° вокруг шести диагоналей граней (биссектрисы углов между парами осей, w = 0);
- повороты на ±120° вокруг четырех диагоналей куба (w = 0.5);
Итого 1 + 3×3 + 6 + 4×2 = 24.

> Оси то вообще как расположены, так?
Это не имеет значения.

IsaevПостоялецwww12 июля 201810:47#32
}:+()___ [Smile]
> Лучше прокачать теорию кватернионов.
Да я уже в процессе) похоже с их помощью всё довольно удобно задаваться будет

IsaevПостоялецwww13 июля 201816:34#33
В общем табличку я создал и понял какой элемент за что отвечает
+ Показать

Как её теперь можно использовать для моего случая из шапки например?
т.е. для поворотов R B L F нам нужны кватернионы с индексами 1, 6, 4, 3 соответственно
применяем к кубику URF (верхний-справа-спереди) //верх - белый, перед - зеленый, справа - красный
он у нас в результате развернулся по часовой на 120°, т.е. соответствует индексу 13 в таблице
если я их перемножу, получу 12! или что с ними нужно делать?
}:+()___ [Smile]Постоялецwww14 июля 20188:02#34
Isaev
> Как её теперь можно использовать для моего случая из шапки например?
Берешь и перемножаешь все нужные повороты. Лучше это делать с помощью целочисленной таблицы умножения, чтобы не накапливать ошибку.

> если я их перемножу, получу 12! или что с ними нужно делать?
Перемножать надо в правильном порядке и с правильной стороны.
Если получаешь неправильный результат, значит где-то ошибся.

g-contПостоялецwww14 июля 201811:04#35
Надо для каждого из 27 составных кубиков хранить локальные матрицы. И вычислять какая группа повернётся.

Для удобства можно сделать фильтр по ббоксу, для той стороны, которую мы собрались вращать. По вектору вращения увеличиваем bbox на всю грань кубика и смотрим какие элементы туда попали. Строим для них матрицу поворота, которая тоже будет локальной, по отношению к глобальным координатам всего кубика.
И вращаем через эту матрицу. Тут главное не запутаться.

Правка: 14 июля 2018 11:09

IsaevПостоялецwww14 июля 201812:38#36
}:+()___ [Smile]
> Перемножать надо в правильном порядке и с правильной стороны.
> Если получаешь неправильный результат, значит где-то ошибся.
Ну я написал порядок по которому умножаю, в чём ошибка? Таблица есть по ней сразу должно быть видно что я делаю не так
bykabakПостоялецwww14 июля 201812:45#37
Тут главное не запутаться.

+++

Все дружно пошли в густой, непроходимый лес.  А зачем ?

IsaevПостоялецwww14 июля 201812:46#38
g-cont
> Надо для каждого из 27 составных кубиков хранить локальные матрицы.
вы ни разу не оптимизаторы! :) я вместо 2 целочисленных векторов на элемент пытался оставить 1, а мне прикрутили кватернионы(но эта идея мне нравится, они, похоже всё упростят, как разберусь) с плавающей арифметикой, а теперь ещё и по матрице на каждый кубик?)
g-contПостоялецwww14 июля 201813:17#39
Isaev
> вы ни разу не оптимизаторы!
Есть такое понятие, как преждевременная оптимизация. Я надеюсь в игре один кубик, а не тысяча?

Isaev
> а теперь ещё и по матрице на каждый кубик?)
Игра для спектрума делается?

Правка: 14 июля 2018 13:18

IsaevПостоялецwww14 июля 201817:03#40
g-cont
> Я надеюсь в игре один кубик, а не тысяча?
один, но он может делать десятки млн вращений при поиске решения... пока он делает это за 1 сек это хорошо, а превратить это в 20 секунд нет никакого желания
мы и так говорим о локальных координатах, ибо меремещания у меня отдельно считаются

PS: вроде работает всё! (в моей модели просто ось Z в другую сторону, надо переделать)
меня просто смутил этот ответ
}:+()___ [Smile]
> > Оси то вообще как расположены?
> Это не имеет значения.

g-contПостоялецwww14 июля 201817:50#42
Isaev
> один, но он может делать десятки млн вращений при поиске решения...
https://lenta.ru/news/2017/09/05/rubik/ цитата оттуда:
собрал кубик Рубика за 4,69 секунды
В отличие от компьютора, ни один человек в мире не способен за 5 секунд повернуть грани кубика десятки миллионов раз. Я вообще сильно сомневаюсь что он сделал более 20 поворотов за пять секунд.
Из чего вытекает другой вопрос, если уж мы ищем решение задачи, зачем нам вообще что-то анимировать а тем более вращать. А тем более десятки миллионов раз в секунду.
IsaevПостоялецwww14 июля 201817:58#43
Delfigamer
> Виртуальный кубик для тех, кто не хочет ломать пластмассовые?
Это уже есть, прекрасный симулятор от нашего соотечественника в котором собрано на данный момент больше 1800 головоломок и постоянно пополняется. Потому надобности в велосипеде нет особо.
У меня более скромный проект для более узкого круга любителей именно бандажных кубов
Delfigamer
> Или алгоритм, который из произвольного положения находит оптимальный путь к победе и показывает его?
можно и глобально, но это для ленивых, т.к. на то они и головоломки, чтобы решать самому... Более интересно исследование конкретных алгоритмов чистой оптимальной перестановки нескольких элементов в конкретной конфигурации, за какое минимальное количество ходов они вообще возможны.
технически ничего интересного, будет граф, будет поиск по A до B, скорее всего в 2 потока одновременно с двух вершин и поиском пересечения
IsaevПостоялецwww14 июля 201818:11#44
g-cont
> Я вообще сильно сомневаюсь что он сделал более 20 поворотов за пять секунд.
20 это только полный компьютерный просчёт, так называемый алгортм Бога (для классического 3х3 диаметр графа Кэли 20, потому компьютеру тоже можно глубину поиска спокойно обрезать до 20 и он найдёт решение).
Они делают чуть больше, до около 10 поворотов в секунду.
НО! Они собирают классический кубик, они не собирают его оптимально, они делают сотни сборок ежедневно, чтобы не потерять хватку. Это страшные люди)

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

Правка: 14 июля 2018 21:47

Страницы: 1 2 3 4 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр