3

m ピクセルの 2D サーフェスに p 個のノードがあるとします。ノードが互いに引き付けられて、離れているほど引き付け力が強くなるようにします。しかし、2 つのノード間の距離、たとえば d(A,B) が、たとえば k などのしきい値よりも小さい場合、それらは反発し始めます。ノードの座標を時間の経過とともに更新する方法について、誰かが私にいくつかのコードを始めてもらえますか。

アトラクションを開始する以下のコードに少し似たものがありますが、アドバイスを探しています。(PSこれを行うために既存のライブラリを使用することはできません)。

public class node{
 float posX;
 float posY;
}

public class mySimulator{

ArrayList<node> myNodes = new ArrayList<node>();

// Imagine I add a load of nodes to myNodes
myNodes.add(.....

// Now image this is the updating routine that is called at every fixed time increment

public void updateLocations(){
 for(int i =0; i <= myNodes.size(); i++){
  for(int i =0; i <= myNodes.size(); i++){
  myNodes.get(i).posX = myNodes.get(i).posX + "some constant"*(myNodes.get(j).posX -myNodes.get(i).posX);
  myNodes.get(i).posY = myNodes.get(i).posY + "some constant"*(myNodes.get(j).posY -myNodes.get(i).posY);
  }
 }
}

}


}
4

2 に答える 2

2

m ピクセルの 2D サーフェスに p 個のノードがあるとします。ノードが互いに引き付けられて、離れているほど引き付け力が強くなるようにします。しかし、2 つのノード間の距離、たとえば d(A,B) が、たとえば k などのしきい値よりも小さい場合、それらは反発し始めます。

もちろん、これは磁気の物理学がどのように機能するかではないことを理解していますか?

ノードの座標を時間の経過とともに更新する方法について、誰かが私にいくつかのコードを始めてもらえますか。

実際には難しい問題であるため、これを簡単に行うためのコードを誰も提供することはできません。

各粒子の常微分方程式を経時的に数値積分できます。2D の位置、速度、および加速度ベクトルの初期条件が与えられた場合、時間ステップを取得し、方程式を統合して時間ステップの終了時の値を取得し、増分を追加して値を更新してから、もう一度実行します。 .

2D ベクトル、数値積分、常微分方程式、線形代数、および物理学に関する知識が必要です。それらについて何か知っていますか?

粒子間の相互作用を制御する独自の物理法則を「作成」したとしても、その一連の方程式を統合する必要があります。

ODE 系については、Runge-Kutta を参照することをお勧めします。 「Numerical Recipes」には、実装のために他の場所に行ったとしても、それに関する素晴らしい章があります。

「NR」は現在第3版です。少し物議をかもしますが、散文はとても良いです。

于 2010-01-24T16:50:32.123 に答える
2

この弾性衝突の動的モデルは、磁気とはまったく関係ありませんが、この設計により、相互作用する粒子の集合をモデル化するためのアイデアが得られるかもしれません。

于 2010-01-24T17:23:23.523 に答える