n
ランダムポイントのキューブを作成して、最小距離のしきい値がすべて1
であるようにしようとしています。私はそれを行うために行列を使用しているので、各列はキューブの(x,y,z)
ポイントになります。私は時にはそれが動作し、ときどき動作しないコードを持っています。私は本当に理由は分かりません...助けやアドバイスは、コードの入力は、キューブの側面の1つの長さと私が使用したい点の数であると評価されています。最小距離のランダムなポイント[オクターブ]
更新:コードの 明確化:
だから、3
列とn
行のランダムな行列を作成することになっています。これは、キューブ内でn
ポイントの座標(x,y,z)
を表します。制約条件は、キューブlx
のサイズと、ポイント間の最小距離d
です。だから私のコードはnx3
ランダム行列を生成し、その要素の新しい点を生成していなければ、その距離が少なくとも1
であるかどうかを確認するために各項目をチェックします。その後、それは戻って、その制限を維持するために前のすべての点をチェックします。一部のポイントの距離が1
未満であるため、失敗しています。私は十分なチェックをしていないか、それが何か他のものかどうかはわかりません。
入力値:キューブの
- 長さ:ポイントの
lx = 7.35
- 数:
n = 256
コード:
function [A]=distribution(lx,n)
format long;
A=0;
new=0;
d=1;
A=rand(n,3).* [lx];
A=reshape(A.' ,3,n);
while(new <= (n+1))
for i=1:(n-1)
for j=(i+1):n
r=A(:,i) - A(:,j);
rsum= sum(dot(r,r));
if(rsum < 1.0)
A(:,j)=rand(1,3).* [lx];
end
end
for k=1:i-1
r2=A(:,k) - A(:,i);
r2sum= sum(dot(r2,r2));
if(r2sum < 1.0)
A(:,j)=rand(3,1).* [lx];
end
end
end
new=new +1;
endwhile
A=reshape(A.' ,n,[]);
「時にはそれが動作し、時にはそれが動作しない」を掘るかもしれない動作しない場合は、かなりあいまいです。あなたのコードは何をしているのですか? – beaker
したがって、3つの列とN行のランダムな行列を作成することになっています。これは、キューブ内のポイントのXYZ座標を表します。制約は、キューブのサイズ(lx)とポイント間の最小距離(d)です。だから私のコードは、nx3のランダムな行列を生成し、その要素の新しい点を生成しない場合は、距離が少なくとも1であるかどうかを確認するために各項目をチェックします。その後、それは戻って、その制限を維持するために前のすべての点をチェックします。いくつかのポイントの距離が1未満であるため失敗しました。 – Oppenheimer
これはランダムな処理ですので、時々失敗すると思います。入力として渡している値は何ですか? [編集]をクリックして、元の質問に更新または説明(以前のコメントを含む)を追加してください。 – beaker