2010-04-23 5 views
9

Может кто-нибудь порекомендовать хорошие отправные точки для понимания Матрицы трансформации для таких манекенов, как я, с плохими математическими навыками.Может ли кто-нибудь порекомендовать несколько Матриц трансформации для манекенов?

Я хочу узнать математику, и я не полный идиот (надеюсь), но примеры, которые я нахожу, требуют огромного скачка от того, что я знаю, к тому, что мне нужно знать.

+0

С перспективой применения? Вы строите любое приложение? – Guru

+0

Я пытаюсь справиться с преобразованиями CSS3 и webkits matrix3d. http://developer.apple.com/safari/library/documentation/AppleApplications/Reference/SafariCSSRef/Articles/Functions.html – gargantuan

ответ

18

Я написал веб-программу, которая может использоваться для игры с матрицами трансформации. Он позволяет использовать предустановленные типы и пользовательские.

screenshot of transformation matrix program

Play with it online или grab the source.

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

Если у вас возникли проблемы, поймите, что матрица 3 × 3 просто умножается на каждую вершину (X & Y координаты) в форме дома. Умножение матриц с вершиной (теперь мы будем ссылаться на него как вектор) и матрица преобразование выглядит так ...

1 0 0 1 
0 1 0 * 2 
0 0 1 0 

Слева является identity matrix (идемпотентная матрицей, которая не влияет на вектор) и вектор 1, 2, 0 (предположим, что это отображает в положение X1 и Y2 в графике упомянутого выше программы и игнорирует окончательный 0).

Matrix multiplication могут быть визуализированы как так ...

a b c x a * x + b * y + c * z 
d e f + y = d * x + e * y + f * z 
g h i z g * x + h * y + i * z 

Таким образом, в нашем примере, это было бы ...

1 0 0 1 1 * 1 + 0 * 2 + 0 * 0 
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 0 
0 0 1 0 0 * 1 + 0 * 2 + 1 * 0 

ли, что математика и мы получаем конечный вектор .. .

1 
2 
0 

Поскольку мы сказали, что наша единичная матрица не должна изменять значения, мы можем видеть выше, что t Это случай, когда результирующий вектор соответствует оригиналу.

Чтобы объяснить далее, рассмотрите, когда вам нужно перевести вектор. Предположим, мы хотим перевести дом на 5 пикселей вдоль оси X. Мы хотим начать с идентификационной матрицы, но изменим верхнее правое число на 5 и сделаем дополнительное измерение в векторе 1 (вы увидите, почему ненадолго).

1 0 5 1 1 * 1 + 0 * 2 + 5 * 1 
0 1 0 * 2 = 0 * 1 + 1 * 2 + 0 * 1 
0 0 1 1 0 * 1 + 0 * 2 + 1 * 1 

Мы делаем математику снова ...

6 
2 
1 

Мы можем видеть, что первое число (X в наших координатах) были переведены вдоль оси X по 5. Попробуйте в программе, указанной выше.

Причина, по которой мы сделали третье значение 1, так, когда математика была выполнена, рассматривался перевод. Если бы это было 0, оно будет проигнорировано, так как любое число, умноженное на 0, приводит к 0.

Если у вас по-прежнему возникают проблемы, ознакомьтесь с видеороликами в Интернете (например, this one), которые могут помочь объяснить его более наглядным образом.

Помните: практически каждый может управлять автомобилем, и почти каждый может узнать это, несмотря на любое самооцененное плохое понимание математики. Просто продолжайте: упорство - ключевое. Удачи.

+1

Это было потрясающе – Rasmus

+1

Этот ответ заслуживает большего количества голосов, учитывая количество просмотров, которые этот вопрос имел. – gargantuan

6

Преобразование - это не что иное, как матрица, умножающая вектор на произведение преобразованного вектора, поэтому, если вы не понимаете умножения и добавления матриц, вы не можете получить очень далеко.

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

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

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

8

Как показано на рисунке, матричные преобразования - это не что иное, как (пре) умножение вектора (например, трехмерной точки) на матрицу. Однако это чистая математика, и для некоторых людей трудно представить ее.

Лучший способ понять матрицы преобразования (по крайней мере для меня), чтобы получить пример кода, получить его работает и поиграйте с номерами. Попытайтесь увидеть, можете ли вы поместить объект дальше или повернуться на 45 градусов. Попробуйте поместить преобразования в разным заказом и посмотреть, что результаты.

Все работает? Хорошо.

После того, как вы получите ощущение, что, если вы достаточно смелы, чтобы решать математику, вы могли бы сделать эти шаги:

Во-первых, понять, как матрица умножений работы. Некоторые ссылки:

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

Во-вторых, я всегда рекомендую проводить во второй половине дня, пытаясь реализовать свой собственный Matrix класс и определить несколько общих операций, как mul(Vector v), transpose() или даже createTranslationMatrix(float x, float y, float z). Проведите несколько тестов и посмотрите, совпадают ли результаты с тем, что вы сделали вручную.

Если вы зашли так далеко, попробуйте реализовать свою Перспективную трансформацию! Это самая удивительная вещь, которую мы никогда не ценим. Полезное объяснение здесь:

Вы будете очень гордиться собой, как только вы сделали один из самых labourous, но недооцененная задачу реализации объекта матрицы. Удачи!