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

ентация Apple по «Работе с матрицами» не только использует противоречие между основными столбцами и основными строками, но и усугубляет путаницу, приводя примеры «построения» матрицы преобразования и «матрицы вращения» в 2D.

Перевести матрицу в документацию Apple ()

Перевод Матрица перевода принимает следующую форму:

1  0  0
0  1  0 
tx ty 1

Библиотека simd предоставляет константы для единичных матриц (матриц с единицами по диагонали и нулями в других местах). Тождественная матрица с плавающей запятой 3 x 3 - matrix_identity_float3x3.

Следующая функция возвращает матрицу simd_float3x3, используя указанные значения преобразования tx и ty, устанавливая элементы в единичной матрице:

func makeTranslationMatrix(tx: Float, ty: Float) -> simd_float3x3 {
    var matrix = matrix_identity_float3x3

    matrix[0, 2] = tx
    matrix[1, 2] = ty

    return matrix 
}

Моя проблема с этим

Строка кодаmatrix[0, 2] = tx устанавливает значение первого столбца и третьей строкиtx. let translationMatrix = makeTranslationMatrix(tx: 1, ty: 3) и распечатывать 2-й столбецprint(translationMatrix.columns.2) будет даватьfloat3(0.0, 0.0, 1.0), Меня очень смущает вопрос, почему именно последняя строка содержит значения перевода, а не столбец. Это соглашение не используется при использованииSCNMatrix4MakeTranslation и созданиеsimd_float4x4 внеSCNMatrix4 объект.

var A = SCNMatrix4MakeTranslation(1,2,3)
var Asimd = simd_float4x4(A)

A.m41 // 1
A.m42 // 2
A.m43 // 3
A.m44 // 1

Asimd.columns.3 // float4(1.0, 2.0, 3.0, 1.0)

ОбеSCNMatrix4 а такжеsimd_float4x4 следоватьосновной столбец соглашение об именовании. В 2D-примере от Apple, это последняя строка, которая содержит значения перевода, тогда как сSCNMatrix4 и преобразование вsimd_float4x4, это последний столбец, который содержит значения перевода. Пример Apple, похоже, делает то же самое с матрицами вращения.

Чего мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос