![]() |
Прямая кинематика
День добрый, имеется массив точек, координаты и углы которых указаны относительно родителя.
Код AS3:
Объект Joint представляю себе примерно так: Код AS3:
p.s Относительные координаты постоянно меняются |
Я бы лучше посоветовал воспользовался готовыми методами: locatoToGlobal и globalToLocal для получения координат. В случае с самостоятельными расчётами, вам потом ещё придётся умножить конечные точки на абсолютную матрицу, что-бы получить итоговый результат. |
1.Это понятно, но у меня точка в пространстве и есть отдельный объект.
2.Видимо тут имеет значение порядок. Если перемножать рекурсивно сверху вниз, получаются косяки небольшие, но в целом похоже. Сейчас попробую снизу вверх. Код AS3:
locatoToGlobal - вернет только x,y . Вращение все равно нужно будет вычислять вручную. UPD , да обход снизу вверх - исправил ситуацию, Спасибо, теперь считается правильно. Смущает только то, что теперь нельзя обсчитать все за один обход( В ObjectContatiner это так же реализовано? |
Можно подробней про один проход, почему нельзя?
|
Нужно подняться вверз из каждого узла. то есть многие узлы будут пройдены по несколько раз.
|
Кэширование матриц решит. Допустим есть дерево, (root)-(parent)-(child1, child2, child3). Лишь первый раз мы рекурсивно пройдемся от child1 к root и в каждом элементе (хотя в данном случае это нужно только для parent, но мы же рассматриваем общий алгоритм) закэшируем полученный результат — матрицу относительно stage. После этого child2 и child3 уже не будут бегать вверх, а лишь используют кэшированную (прямую или обратную, в зависимости от задач) матрицу своего родителя — объекта parent.
Добавлено через 1 минуту Разумеется, это лишь один из вариантов. Как правило подобное кэширование происходит сверху-вниз по инициативе родителя, когда он трансформируется, что и приводит к необходимости пересчитать stageMatrix у всех детей. Но это уже совсем общий подход. Можно сделать и так, чтобы сразу привыкать к хорошему :) |
Я бы вообще хранил 2 матрицы на объект - относительную и абсолютную. Ну и да, как правильно заметил Zebestov, кеширование не повредит.
|
Да, спасибо. Но во время анмаиции каждый узел обновляется по enterFrame, соответтственно и пересчет в глобальные координаты. Так что кеширование тут не даст ощутимого результата.
Добавлено через 28 минут И еще вопрос, как правильно в виде матрицы записать следующее преобразование: Код AS3:
|
Цитата:
Цитата:
Код AS3:
Более наглядно и, в то же время, подробно здесь. |
Спасибо)
|
| Часовой пояс GMT +4, время: 20:50. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.