ошибка: нет совпадения для оператора * (типы операндов: «QGenericMatrix <4, 4, float>» и «QGenericMatrix <4, 3, float>») - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь умножить две матрицы следующим образом:

float values4x3[] = {
    3, 3, 3,
    1, 1, 1,
    2, 2, 2,
    1, 1, 1
};
QGenericMatrix< 4, 3, float > myMat4x3 (values4x3);

float values4x4[] = {
    3, 3, 3, 3,
    1, 1, 1, 1,
    2, 2, 2, 2,
    1, 1, 1, 1
};
QGenericMatrix< 4, 4, float > myMat4x4 (values4x4);

QGenericMatrix< 4, 3, float > product4x3 = myMat4x4 * myMat4x3;

qDebug() << __func__ << "product4x3 = " << product4x3;

Однако я получаю сообщение об ошибке:

Ошибка: нет совпадения для оператора *(типы операндов: «QGenericMatrix <4, 4, float>» и «QGenericMatrix <4, 3, float>»)


Для умножения существует этот оператор два экземпляра QGenericMatrix, но я запутался и не уверен, как использовать его с NNxM2 и M1xNN.


ОБНОВЛЕНИЕ

Как предложено @scopchanovЯ поменял две матрицы следующим образом:

QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;

Теперь ошибка устранена, и результат записывается так:

qDebug() << __func__ << "product4x3 = " << product4x3;

Журналы:

product4x3 =  QGenericMatrix<4, 3, float>(
    19        19        19        19         
    10        10        10        10         
    10        10        10        10         
)

Приведенная выше матрица на самом деле 3x4!Ну, это немного сбивает с толку.

1 Ответ

0 голосов
/ 27 августа 2018

Причина

В математике порядок умножения должен составлять MxP раз PxN, чтобы произвести MxN произведение.Другими словами, внутренние размеры матриц должны совпадать.

Однако документация для QGenericMatrix<M1, M2, TT> operator* гласит:

Возвращает произведение матрицы NNxM2 m1 и матрицы M1xNN m2 для получения результата матрицы M1xM2.

Это означает, что для получения результата умножения A и B необходимо сначала написать B, а затем A.

* 1022.* Если честно, я нахожу это довольно странным, учитывая то, к чему мы привыкли.

Решение

Поменяйте местами матрицы следующим образом:

QGenericMatrix< 4, 3, float > product4x3 = myMat4x3 * myMat4x4;

Результат

Для приведенного вами примера результат:

MainWindow product4x3 =  QGenericMatrix<4, 3, float>(
        19        19        19        19         
        10        10        10        10         
        10        10        10        10         
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...