Размеры матрицы должны совпадать с ошибкой, в то время как на самом деле - PullRequest
0 голосов
/ 10 марта 2019

Я получил сообщение об ошибке:

Matrix dimensions must agree.

Error in tankGame>exmRange (line 119)
    if (p1.dir == 'down') p1.value = imrotate(p1.oriValue, 180,'bilinear'); end

Еще я проверил размер p1.value и p1.oriValue, оба они 32x32x3. И если я удаляю эту часть, программа работает отлично.

Я предполагаю, что это потому, что imrotate каким-то образом изменил размер (хотя это не должно происходить, для поворота квадратного изображения на 180 градусов), так как я могу это исправить?

1 Ответ

2 голосов
/ 10 марта 2019

Вероятность возникновения ошибки: p1.dir == 'down'.Оператор == является поэлементным оператором, он сравнивает каждый из символов в двух символьных векторах, получая логический вектор, указывающий, какие из пар символов равны.Он не выполняет сравнение строк.

Например, если p1.dir является символом вектора 'up ', то вы сравниваете вектор с 2 символами и вектор с 4 символами:

'up'=='down'   % generates the error message "Matrix dimensions must agree."
'doom'=='down' % returns the logical array [true true false false]

Используйте strcmp для сравнения строк:

if strcmp(p1.dir,'down')
   p1.value = imrotate(p1.oriValue, 180,'bilinear');
end

В более новых версиях MATLAB (начиная с R2016b) существует фактический тип string (в отличие от charвектор, который всегда назывался "строка" в MATLAB).string создается с двойными кавычками: "down" (в отличие от 'down', который является вектором char).Для этого нового типа оператор == выполняет сравнение строк.При применении оператора к вектору string a char char преобразуется в string.Таким образом, другое решение было бы сделать это:

if p1.dir == "down"
   p1.value = imrotate(p1.oriValue, 180,'bilinear');
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...