Подтвердить что ты не робот

Где я могу найти объяснение всех полей матрицы преобразования?

Я видел в каком-то документе из яблока, что матрица за свойством преобразования CALayer имеет поля, такие как m14, m21, m22 и т.д. Я также помню, что я видел таблицу, которая объясняет эти поля, примерно один или два месяца назад. Мне было трудно найти его. Кто-нибудь знает источник?

4b9b3361

Ответ 1

Эта структура выглядит следующим образом:

struct CATransform3D
{
    CGFloat m11, m12, m13, m14;
    CGFloat m21, m22, m23, m24;
    CGFloat m31, m32, m33, m34;
    CGFloat m41, m42, m43, m44;
};
typedef struct CATransform3D CATransform3D;

Это просто матрица преобразования 4x4, используемая для преобразования 4-векторов. Его можно использовать для представления любого числа линейных преобразований. См. эту статью в википедии по этому типу матрицы. Большинство из этих элементов нельзя интерпретировать независимо, но некоторые могут. Например, m41, m42 и m43 представляют собой перевод в 3-х пространстве. Например, если вы умножаете точку на эту матрицу:

[ 1  0  0  0 ]
[ 0  1  0  0 ]
[ 0  0  1  0 ]
[ 1  2  3  1 ]

Затем он переведет эту точку на 1 в сторону + X, 2 единицы в сторону + Y и 3 в сторону + Z.

                   [ 1  0  0  0 ]
[ x  y  z  1 ]  x  [ 0  1  0  0 ]  =  [ x+1  y+2  z+3  1 ]
                   [ 0  0  1  0 ]
                   [ 1  2  3  1 ]

Обратите внимание, что точка должна быть представлена ​​в виде 4-го вектора с 4-м элементом, равным 1. Также обратите внимание, что этот вектор фактически является самой матрицей, а формат этой матрицы отличается от формата, описанного в статье wikipedia о матрицах преобразования. Это связано с тем, что точка обычно представлена ​​одной колонкой, 4-строчной матрицей, однако Apple представляет их как 4 столбца, однострочные матрицы. Это означает, что любая матрица преобразования, которую вы видите в статье wikipedia, должна быть перенесена, прежде чем использовать ее на iPhone, чтобы она работала правильно.

Другим примером является масштабирующее преобразование:

[ 2  0  0  0 ]
[ 0  2  0  0 ]
[ 0  0  2  0 ]
[ 0  0  0  1 ]

Он удвоит все координаты вашей точки, поэтому (1, 2, 3) станет (2, 4, 6). Другие преобразования, такие как вращения и перспективные проекции, более трудно распознать на вид.

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