Вероятность возникновения ошибки: 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