Вы должны сначала преобразовать точки во внутреннюю систему координат, прежде чем делать что-либо еще. Поменять местами оси Y и Z тривиально — просто поменяйте местами координаты y и z. Если вы хотите делать все с цепочками матриц, вы можете сделать матрицу, которая сделает это за вас:
swapYZ_xyz = [ 1 0 0 ] or, swapYZ_xyzw = [ 1 0 0 0 ]
[ 0 0 1 ] [ 0 0 1 0 ]
[ 0 1 0 ] [ 0 1 0 0 ]
[ 0 0 0 1 ]
Обратите внимание, что это преобразование является не вращением: это отражение. Здесь вам нужно отражение -- нет поворота, который может сопоставить левостороннюю систему координат с правосторонней (как требует ваш вопрос), в то время как отражения < em>всегда конвертировать между левшой и правшой.
Это также объясняет, почему представление кватерниона не имеет никакого смысла в отношении этого общего преобразования координат: кватернионы, естественно, представляют только вращения.
Когда у вас есть все в вашей внутренней системе координат, определение поворота каждого сустава становится более сложным вопросом (и я не буду подробно решать его здесь по следующим причинам...)
Во-первых, без дополнительной информации вращение каждого сустава не определено четко. Чтобы увидеть это, предположим, что у вас есть набор вращений, соответствующий заданному набору положений суставов: затем вы можете повернуть любую «кость» между двумя суставами под любым углом, изменяя вращение в обоих суставах, не меняя местоположения суставов. Чтобы устранить эту избыточность, вам нужно указать дополнительные ограничения в некоторых суставах, то есть вам нужно закодировать свои знания о том, как (например) локти могут вращаться.
Во-вторых, после того, как вы устраните вышеуказанные неясности, у вас все еще будут плохо определенные случаи — например, если руки прямые, вы на самом деле не можете сказать, как плечо повернуто относительно ваших кистей и плеч. Любой решатель должен будет каким-то образом справиться с этим случаем - и помните, что ваши данные будут зашумлены...
Лучшим общим решением может быть создание математической модели вашей позы и запуск фильтра Калмана для интегрировать (зашумленные) входные данные. Это важное мероприятие, но оно может позволить вам надежно справляться с зашумленными данными и временными неоднозначностями.
person
comingstorm
schedule
26.04.2013