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 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Stephen23
2015-10-3
编辑:Stephen23
2015-10-3
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 个评论
Stephen23
2015-10-3
编辑:Stephen23
2015-10-3
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.
更多回答(0 个)
另请参阅
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!