J'ai une classe appelée forest et une propriété appelée fixedPositions qui stocke 100 points (x, y) et ils sont stockés 250x2 (lignes x colonnes) dans MatLab. Quand je sélectionne 'fixedPositions', je peux cliquer scatter et il va tracer les points.Rotation Matrix calcule par colonne non par ligne
Maintenant, je veux faire pivoter les points tracés et j'ai une matrice de rotation qui me permettra de faire cela.
Le code ci-dessous devrait fonctionner:
thêta = obj.heading * pi/180; apparent = [cos (thêta) -sine (thêta); sin (thêta) cos (thêta)] * obj.fixedPositions;
Mais ça ne va pas. J'ai cette erreur.
??? Erreur lors de l'utilisation de ==> mtimes Les dimensions de la matrice interne doivent être identiques. Erreur dans ==> landmarks> landmarks.get.apparentPositions à 22 apparente = [cos (thêta) -sine (thêta); sin (thêta) cos (thêta)] * obj.fixedPositions;
Lorsque je modifie forest.fixedPositions pour stocker les variables 2x250 au lieu de 250x2, le code ci-dessus fonctionnera, mais il ne tracera pas. Je vais tracer des Positions fixes en permanence dans une simulation, donc je préférerais le laisser tel quel et faire en sorte que la rotation fonctionne.
Des idées?
De plus, les positions fixes sont la position des points xy comme si vous regardiez droit devant vous. c'est-à-dire le cap = 0. le cap est réglé à 45, ce qui signifie que je veux faire pivoter les points dans le sens des aiguilles d'une montre à 45 degrés.
Voici mon code:
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
post-scriptum Si vous changez une ligne à ceci: obj.fixedPositions = 100 * rand ([2, numberOfTrees]). * Sign (rand ([2, numberOfTrees]) - 0.5);
Tout va bien fonctionner ... il ne sera pas tracé.
ans = obj.fixedPositions; ans '; va le retourner à ce que j'ai besoin de tracer, mais il doit y avoir un moyen d'éviter cela?
Argent! Merci. Off the main, est la meilleure façon d'animer quelque chose comme ça juste pour effacer le nuage de points et le redessiner? –