Есть ли правильный способ превратить раздел пролета (блока) в матрицу 4x4?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Есть ли правильный способ превратить раздел пролета (блока) в матрицу 4x4?

Сообщение Anonymous »

Справочная информация:
чтобы найти кофактор m00 в матрице 4x4, необходим правый нижний блок памяти 3x3 в исходном m4x4. Поэтому я подумал, что, возможно, есть способ получить доступ к этой части памяти без создания матричной структуры 3x3 с копированием всех соответствующих значений.
Что я сделал:
похоже на что-то вроде работы по срезу/диапазону памяти, поэтому я наивно создаю следующие структуры, думая, что это может быть то, что мне нужно для переноса в m4x4 без копирования значений:

Код: Выделить всё

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) { }
};
Использование:

Код: Выделить всё

// 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.
Вопрос: есть ли способ сделать диапазон блоков матрицы или что-то в этом роде?

Подробнее здесь: https://stackoverflow.com/questions/793 ... matrix-4x4
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»