2016-11-22 5 views
1

私は平坦なユークリッド長方形の表面を持っていますが、ポイントが右の境界に移動すると、左の境界に(同じy値で)表示されます。また、上下の境界をまたいだ移動のための逆も同様です。私は一連の点の重心を計算できるようにしたいと思います。問題のポイントの集合は、ほとんど一緒にまとまっています。トロイダルラッピング(x-およびy-ラップ)2D配列上の一連の位置の重心?

すべてのxとyの値を平均して、点の集合の重心を計算することができます。ラップアラウンドマップではどうすればよいですか?

+0

あなたのポイントは隣接していることが保証されていますか?もしそうでなければ、トーラスの正反対の2つの点の重心をどのように定義しますか? – 0x5453

+0

彼らはほとんどが隣接しています。必ずしもそうではありません。完全に反対側にポイントがある場合は、問題の軸はそれ以上重要ではなく、もう一方の軸が必要です。 – Ross

答えて

0

私はこれをRamachandranプロットで前に行っています。私はチェックしますが、私は私が使用したアルゴリズムを覚えているようだ:

  1. は、あなたのユークリッド面積は、(0,0)を原点としていると仮定し
  2. シフトにセット内のすべてのポイントを、彼らが完全に内になるように、エリア
  3. は重心
  4. シフトバックだから、元

の逆によって重心を計算し、あなたのポイントをX軸にまたがって分割されていると言う、あなたは最小点セットのX座標を見つけますそれよりも大きい領域の中点軸。次にY軸の端に距離dを見つけます。次に、クラスタ全体をdで移動します。クラスタサイズは、(グリッドの半分よりも小さい)が比較的小さい場合

1

すると、あなたは単純なアプローチを使用することができます。

レッツ面幅と高さはWであり、H.は、表面寸法を三倍にしていることを想像して、あなたが持っています - W.2.2 * Wおよび-H.2.2 * H軸の範囲。ラップされた値をアンロールします。

XMin = X[0]; XMax = X[0] 
the same for Y 

for i = 1..N-1 
    Check distance from X[i] to XMax and XMin 
    Get largest of them D 
    If D is larger than W/2, shift X[i] by W 
    //example1: W=100, Xmin = 70, XMax = 90, X[i]=10 => X[i]=20+100 = 120 
    //example2: W=100, Xmin = 5, XMax = 12, X[i]=98 => X[i]=98-100 = -2 
    the same for Y 
    update Min/Max 
    Calc (W + Average(X[i])) %% W //modulo operation 
関連する問題