Я видел в каком-то документе из яблока, что матрица за свойством преобразования CALayer имеет поля, такие как m14, m21, m22 и т.д. Я также помню, что я видел таблицу, которая объясняет эти поля, примерно один или два месяца назад. Мне было трудно найти его. Кто-нибудь знает источник?
Где я могу найти объяснение всех полей матрицы преобразования?
Ответ 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, но эта ссылка делает.