Я много читал об этом, чем больше читаю, тем больше смущаюсь.
Мое понимание: в строковых рядах хранятся смежно в памяти, в столбцах основные столбцы хранятся смежно в памяти. Поэтому, если у нас есть последовательность чисел [1, ..., 9]
, и мы хотим сохранить их в основной строке, получим:
|1, 2, 3|
|4, 5, 6|
|7, 8, 9|
в то время как майор столбца (исправьте меня, если я ошибаюсь):
|1, 4, 7|
|2, 5, 8|
|3, 6, 9|
который эффективно переносит предыдущую матрицу.
Моя путаница: Ну, я не вижу никакой разницы. Если мы итерации на обеих матрицах (по строкам в первом и по столбцам во втором), мы будем покрывать те же значения в том же порядке: 1, 2, 3, ..., 9
Однократное умножение матрицы одно и то же, мы берем первые смежные элементы и умножаем их на второй столбцы матрицы. Итак, скажем, что у нас есть матрица M
:
|1, 0, 4|
|5, 2, 7|
|6, 0, 0|
Если мы умножим предыдущую матрицу основных строк R
на M
, то есть R x M
, мы получим:
|1*1 + 2*0 + 3*4, 1*5 + 2*2 + 3*7, etc|
|etc.. |
|etc.. |
Если мы умножим основную матрицу столбца C
на M
, то есть C x M
, взяв столбцы C
вместо своих строк, мы получим точно такой же результат из R x M
Я действительно смущен, если все одно и то же, почему существуют эти два термина? Я имею в виду даже в первой матрице R
, я мог бы смотреть на строки и рассматривать их столбцы...
Я что-то упустил? Что делает row-major vs col-major на самом деле на моей матричной математике? Я всегда изучал в своих классах линейных алгебр, что мы умножаем строки из первой матрицы со столбцами из второго, это изменится, если первая матрица была в столбце-майор? мы теперь должны умножить свои столбцы на столбцы из второй матрицы, как это было в моем примере, или это было просто неправильно?
Любые разъяснения действительно оценены!
РЕДАКТИРОВАТЬ: Один из других основных источников путаницы, с которыми я столкнулся, - GLM... Поэтому я навешиваю над своим типом матрицы и нажимаю F12, чтобы увидеть, как он реализован, там я вижу вектор array, поэтому, если у нас есть матрица 3x3, мы имеем массив из 3 векторов. Глядя на тип этих векторов, я увидел "col_type", поэтому я предположил, что каждый из этих векторов представляет собой столбец, и, следовательно, у нас есть система основных столбцов?
Хорошо, я не знаю, если честно. Я написал эту функцию печати, чтобы сравнить мою матрицу переводов с glm's, я вижу вектор перевода в glm в последней строке, а мой - в последнем столбце...
Это не добавляет ничего, кроме путаницы. Вы можете ясно видеть, что каждый вектор в матрице glmTranslate
представляет строку в матрице. Итак... это означает, что матрица имеет ряд основных прав? Как насчет моей матрицы? (Я использую массив float [16]) значения перевода находятся в последнем столбце, означает ли это, что моя матрица является столбцом-майором, и я не сделал этого сейчас? пытается остановить голову от вращения