Справочная информация:
чтобы найти кофактор m00 в матрице 4x4, необходим правый нижний блок памяти 3x3 в исходном m4x4. Поэтому я подумал, что, возможно, есть способ получить доступ к этой части памяти без создания матричной структуры 3x3 с копированием всех соответствующих значений.
Что я сделал:
похоже на что-то вроде работы по срезу/диапазону памяти, поэтому я наивно создаю следующие структуры, думая, что это может быть то, что мне нужно для переноса в m4x4 без копирования значений:
// some 4x4 matrix
matrix4x4 m4x4;
// determinant of m00
auto det_m00 = det(f3x3_span(
&m4x4.m11, &m4x4.m21, &m4x4.m31,
&m4x4.m12, &m4x4.m22, &m4x4.m32,
&m4x4.m13, &m4x4.m22, &m4x4.m33)
);
Но я очень сомневаюсь, что использование f3x3_span будет лучше, чем непосредственное использование f3x3. хотя внутренние значения f3x3_span указывают на желаемое местоположение, но при создании f3x3_span все равно потребуется скопировать отдельный указатель из исходного m4x4.
Вопрос: есть ли способ сделать диапазон блоков матрицы или что-то в этом роде?
Справочная информация: чтобы найти кофактор m00 в матрице 4x4, необходим правый нижний блок памяти 3x3 в исходном m4x4. Поэтому я подумал, что, возможно, есть способ получить доступ к этой части памяти без создания матричной структуры 3x3 с копированием всех соответствующих значений. Что я сделал: похоже на что-то вроде работы по срезу/диапазону памяти, поэтому я наивно создаю следующие структуры, думая, что это может быть то, что мне нужно для переноса в m4x4 без копирования значений: [code]struct f3x3 { float m00, m10, m20; // column 0 float m01, m11, m21; // column 1 float m02, m12, m22; // column 2 }; struct f3x3_span { float* m00, * m10, * m20; // column 0 float* m01, * m11, * m21; // column 1 float* m02, * m12, * m22; // column 2 f3x3_span( float* m00, float* m10, float* m20, float* m01, float* m11, float* m21, float* m02, float* m12, float* m22): m00(m00), m10(m10), m20(m20), m01(m01), m11(m11), m21(m21), m02(m02), m12(m12), m22(m22) { } }; [/code] Использование: [code]// some 4x4 matrix matrix4x4 m4x4; // determinant of m00 auto det_m00 = det(f3x3_span( &m4x4.m11, &m4x4.m21, &m4x4.m31, &m4x4.m12, &m4x4.m22, &m4x4.m32, &m4x4.m13, &m4x4.m22, &m4x4.m33) );
[/code] Но я очень сомневаюсь, что использование f3x3_span будет лучше, чем непосредственное использование f3x3. хотя внутренние значения f3x3_span указывают на желаемое местоположение, но при создании f3x3_span все равно потребуется скопировать отдельный указатель из исходного m4x4. Вопрос: есть ли способ сделать диапазон блоков матрицы или что-то в этом роде?