フォレストというクラスと、100 ポイント (x、y) を格納する fixedPositions というプロパティがあり、MatLab に 250x2 (行 x 列) で格納されます。「fixedPositions」を選択すると、散布図をクリックして点をプロットできます。
ここで、プロットされた点を回転させたいと思います。それを可能にする回転行列があります。
以下のコードは機能するはずです。
シータ = obj.heading * pi/180; 見かけ = [cos(シータ) -sin(シータ) ; sin(シータ) cos(シータ)] * obj.fixedPositions;
しかし、それはしません。このエラーが発生します。
??? ==> mtimes の使用エラー 内部行列の次元は一致する必要があります。
エラー ==> ランドマーク>landmarks.get.apparentPositions at 22 明らかな = [cos(theta) -sin(theta) ; sin(シータ) cos(シータ)] * obj.fixedPositions;
変数を 250x2 ではなく 2x250 に格納するように forest.fixedPositions を変更すると、上記のコードは機能しますが、プロットされません。シミュレーションで常に fixedPositions をプロットするつもりなので、そのままにして、代わりに回転を機能させたいと思います。
何か案は?
また、固定位置は、まっすぐ前を見ている場合の 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
PS 1 行を次のように変更すると: obj.fixedPositions = 100 * rand([2,numberOfTrees]) .* sign(rand([2,numberOfTrees]) - 0.5);
すべてが正常に機能します...プロットしません。
ans = obj.fixedPositions; ans'; プロットする必要があるものに反転しますが、これを回避する方法が必要ですか?