У меня есть класс с именем forest и свойство fixedPositions, в котором хранится 100 точек (x, y), и они хранятся 250x2 (строки x столбцов) в MatLab. Когда я выбираю «fixedPositions», я могу щелкнуть «разброс», и он построит точки.
Теперь я хочу повернуть нанесенные точки, и у меня есть матрица вращения, которая позволит мне это сделать.
Следующий код должен работать:
theta = obj.heading * pi / 180;
кажущийся = [соз (тета) -син (тета); sin (theta) cos (theta)] * obj.fixedPositions;
Но это не так. Я получаю эту ошибку.
??? Ошибка при использовании ==> mtimes
Размеры внутренней матрицы должны совпадать.
Ошибка в ==> достопримечательностях> landmarks.get.apparentPositions at 22
кажущийся = [соз (тета) -син (тета); sin (theta) cos (theta)] * obj.fixedPositions;
Когда я изменяю forest.fixedPositions для хранения переменных 2x250 вместо 250x2, приведенный выше код будет работать, но он не будет отображаться. Я собираюсь постоянно строить фиксированные положения в симуляции, поэтому я бы предпочел оставить все как есть и вместо этого сделать вращение.
Есть идеи?
Кроме того, фиксированные позиции - это положение точек xy, как если бы вы смотрели прямо вперед. Т.е. заголовок = 0. заголовок установлен на 45, что означает, что я хочу повернуть точки по часовой стрелке на 45 градусов.
Вот мой код:
classdef landmarks
properties
fixedPositions %# positions in a fixed coordinate system. [x, y]
heading = 45; %# direction in which the robot is facing
end
properties (Dependent)
apparentPositions
end
methods
function obj = landmarks(numberOfTrees)
%# randomly generates numberOfTrees amount of x,y coordinates and set
%the array or matrix (not sure which) to fixedPositions
obj.fixedPositions = 100 * rand([numberOfTrees,2]) .* sign(rand([numberOfTrees,2]) - 0.5);
end
function apparent = get.apparentPositions(obj)
%# rotate obj.positions using obj.facing to generate the output
theta = obj.heading * pi/180;
apparent = [cos(theta) -sin(theta) ; sin(theta) cos(theta)] * obj.fixedPositions;
end
end
end
P.S. Если вы измените одну строку на эту: obj.fixedPositions = 100 * rand ([2, numberOfTrees]). * Sign (rand ([2, numberOfTrees]) - 0.5);
Все будет работать нормально ... это просто не сюжет.
ans = obj.fixedPositions; анс; перевернет это к тому, что мне нужно построить, но должен быть способ избежать этого?