У меня есть класс под названием forest и свойство, называемое fixedPositions, которое хранит 100 точек (x, y), и они хранятся в 250x2 (строки x столбцов) в MatLab. Когда я выбираю «fixedPositions», я могу щелкнуть разброс, и он будет строить точки.Матрица вращения вычисляется по столбцу не по строке
Теперь я хочу повернуть начерченные точки, и у меня есть матрица вращения, которая позволит мне это сделать.
В приведенной ниже код должен работать:
тета = obj.heading * пи/180; visible = [cos (theta) -sin (theta); sin (theta) cos (theta)] * obj.fixedPositions;
Но это не будет. Я получаю эту ошибку.
??? Ошибка при использовании ==> mtimes Размеры внутренней матрицы должны совпадать.
Ошибка в ==> ориентиры> landmarks.get.apparentPositions at 22 visible = [cos (theta) -sin (theta); sin (theta) cos (theta)] * obj.fixedPositions;
Когда я изменяю forest.fixedпозиции, чтобы хранить переменные 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; анс; перевернет его на то, что мне нужно для заговора, но должен быть способ избежать этого?
Деньги! Благодарю. С другой стороны, это лучший способ оживить что-то вроде этого, чтобы стереть участок рассеяния и перерисовать его? –