以下の関数をMatlabで実装しました。
function [x y] = cloud(a,b,phi,x0,y0,N)
phi=phi*2*pi/360;
m=ceil(5*N/pi);
x=a*(-1+2*rand(m,1));
y=b*(-1+2*rand(m,1));
f=sqrt(a^2 - b^2);
indexMatrix=zeros(m,3);
indexMatrix(:,1)=x;
indexMatrix(:,2)=y;
insidePointsMatrix=zeros(1,2);
j=1;
for i=1:m
insidePoint=sqrt(((x(i)+f).^2) + (y(i))^2) + sqrt(((x(i)-f).^2) + (y(i))^2);
if (insidePoint<=2*a)
indexMatrix(i,3)=1;
%insidePointsMatrix(j,:)=indexMatrix(i,1:2);
if j<=N
insidePointsMatrix(j,1:2)=indexMatrix(i,1:2);
j=j+1;
end
end
end
arrayfun
とについて読んでcellfun
いますが、それを使用して既に実装した機能を短縮できるかどうか疑問に思っています。(u,v) が特定の行のエントリである 2 xn 行列A
が与えられた場合、各行の次の式の出力をリストする行列を返すにはどうすればよいですか?
sqrt((u+f).^2+v.^2) + sqrt((u-v)^2+v^2)
変数f
とa
は上記で定義されています。一連の点を楕円に変換しようとしています。