The code below explains program to evaluate a 2x2 rotation matrix for given input angle.The code seems to be fine for all elements but one in1st row and second column.Can't figure out where I'm wrong.

3 visualizaciones (últimos 30 días)
function [ var ] = rot( theta )
for j=1:2,
for i=j:2,
if (i==j)
var(i,j) = cosd(theta);
elseif (i-j>0)
var(i,j) = sind(theta);
else
var(i,j) = -sind(theta);
end
end
end
var;
end
The problem, is with var(1,2) which always displays a zero irrespective of angle value.

Respuesta aceptada

Stephen23
Stephen23 el 3 de Oct. de 2015
Editada: Stephen23 el 3 de Oct. de 2015
Using loops is very inefficient code. Try this instead:
function mat = rotmat2d(theta)
assert(isnumeric(theta)&&isscalar(theta),'Value must be a scalar numeric')
mat = [cosd(theta),sind(theta);-sind(theta),cosd(theta)];
end
and tested:
>> rotmat2d(0)
ans =
1 0
0 1
>> rotmat2d(90)
ans =
0 1
-1 0
>> rotmat2d(45)
ans =
0.70711 0.70711
-0.70711 0.70711
>> rotmat2d(180)
ans =
-1 0
0 -1
  2 comentarios
Jai  Khullar
Jai Khullar el 3 de Oct. de 2015
Seems I was taking the hard way. Is there really a need of assert command? please do answer this one! I'm new in matlab. Anyways it was helpful. Thanks!
Stephen23
Stephen23 el 3 de Oct. de 2015
Editada: Stephen23 el 3 de Oct. de 2015
The assert command fits into the category of "your function will work without it, but it is highly highly recommended". Using assert and checking input arguments is certainly a good habit to get into. The trick is to make the checking as minimal as possible, to allow your function to be a general as possible.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Graphics en Help Center y File Exchange.

Etiquetas

Aún no se han introducido etiquetas.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by