2

2D 平面のN 個のランダム座標を生成する必要があります。任意の 2 点間の距離が与えられます (距離の数はN(N - 1) / 2)。たとえば、A、B、C の 3 つの点を生成する必要があるdistABdistACdistBCます。
これを実行できる MATLAB の組み込み関数はありますか? pdist()基本的には逆の機能のものを探しています。

私の最初のアイデアは、ポイントを選択することでした(たとえば、Aが原点です)。distAB次に、半径との 2 つの異なる円上にある B と C をランダムに見つけることができますdistAC。しかし、B と C の間の距離が満たさdistBCれない可能性があり、これが発生した場合の処理​​方法がわかりません。Nが大きい場合、このアプローチは非常に複雑になると思います。

4

2 に答える 2

5

Ansaris の回答を詳しく説明して、次のように作成しました。有効な距離行列が提供されていると仮定し、cmdscale に基づいて 2D で位置を計算し、ランダムな回転を行い (ランダムな平行移動も追加できます)、結果を視覚化します。

%Distance matrix
D = [0 2 3; ...
     2 0 4; ...
     3 4 0];

%Generate point coordinates based on distance matrix
Y = cmdscale(D);

[nPoints dim] = size(Y);

%Add random rotation
randTheta = 2*pi*rand(1);
Rot = [cos(randTheta) -sin(randTheta); sin(randTheta) cos(randTheta) ];
Y = Y*Rot;

%Visualization
figure(1);clf;
plot(Y(:,1),Y(:,2),'.','markersize',20)
hold on;t=0:.01:2*pi;
for r = 1 : nPoints - 1 
    for c = r+1 : nPoints
        plot(Y(r,1)+D(r,c)*sin(t),Y(r,2)+D(r,c)*cos(t));
        plot(Y(c,1)+D(r,c)*sin(t),Y(c,2)+D(r,c)*cos(t));
    end
end

ここに画像の説明を入力

于 2012-05-22T22:58:22.993 に答える
3

古典的な多次元スケーリングと呼ばれる手法を使用したいと考えています。あなたが持っている距離が2次元の有効な点間の距離に対応する場合、それは問題なくロスレスで機能します。幸いなことに、MATLAB にはまさにこれを行う関数がありますcmdscale。この関数を距離行列で実行すると、最初の出力引数の最初の 2 列を必要な点として扱うことができます。

于 2012-05-22T21:24:56.470 に答える