我想生成20个均匀间隔的角度。以下是两个不那么简洁的解决方案:
n = 20;
% unnecessary line
angles = linspace(0,2*pi,n+1);
angles = angles(1:end-1)
% intention unclear
angles = (0:n-1)/n * 2*pi
是否有类似linspace
的函数以更好的方式执行此操作?
答案 0 :(得分:0)
linspace
是用Matlab编写的(即它不是内置函数)。您可以轻松修改其代码,以便不生成最后一个元素,并将其另存为另一个函数。
事实上,如果您看到linspace
的代码,您会注意到必须专门附加最后一个元素。所以你的预感是正确的:不包括最后一个元素更“自然”。
在下面的代码中,我包括修改后的三行和原始的一行进行比较。
function y = linspace2(d1, d2, n)
if nargin == 2
n = 100;
end
n = double(n+1); %// modified line
%// Originally: n = double(n);
n1 = floor(n)-1;
vec = 0:n-2;
if isinf(d2 - d1)
y = d1 + (d2/n1).*vec - (d1/n1).*vec; %// modified line
%// Originally: y = [d1 + (d2/n1).*vec - (d1/n1).*vec, d2];
else
y = d1 + (vec.*(d2-d1)/n1); %// modified line
%// Originally: y = [d1 + (vec.*(d2-d1)/n1), d2];
end