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 views (last 30 days)
Show older comments
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.
0 Comments
Accepted Answer
Stephen23
on 3 Oct 2015
Edited: Stephen23
on 3 Oct 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 Comments
Stephen23
on 3 Oct 2015
Edited: Stephen23
on 3 Oct 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.
More Answers (0)
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!