磁模拟

时间:2010-01-24 16:37:20

标签: java graphics game-physics

假设我在n×m像素2D表面上有p个节点,我希望节点彼此吸引,使得它们越远,吸引力越大。但是如果两个节点之间的距离,比如d(A,B)小于某个阈值,比如k,那么它们就会开始排斥。任何人都可以开始使用一些代码来了解如何随时间更新节点的坐标。

我有点像下面的代码,它开始做吸引力,但寻找一些建议。 (P.S.我不能使用现有的库来执行此操作)。

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);
  }
 }
}

}


}

2 个答案:

答案 0 :(得分:2)

  

假设我在n×m像素2D表面上有p个节点,我希望节点彼此吸引,使得它们越远,吸引力越大。但是如果两个节点之间的距离,比如d(A,B)小于某个阈值,比如k,那么它们就会开始排斥。

当然,您意识到这不是physics of magnetism的工作方式吗?

  

任何人都可以开始使用一些代码来了解如何随时间更新节点的坐标。

没有人能够轻松地为您提供代码,因为这实际上是一个难题。

您可以随时间对每个粒子的常微分方程进行数值积分。给定2D中位置,速度和加速度矢量的初始条件,您将采取时间步长,将方程积分以获取时间步结束时的值,通过添加增量更新值,然后再次执行。

它需要一些2D矢量,数值积分,常微分方程,线性代数和物理知识。你对这些有所了解吗?

即使你“弥补”你自己控制粒子之间相互作用的物理定律,你仍然需要整合那套方程式。

我建议在Runge-Kutta上查看ODE系统。 "Numerical Recipes"有一个很好的章节,即使你去其他地方实施。

“NR”现已进入第三版。这有点争议,但散文非常好。

答案 1 :(得分:2)

kinetic model弹性碰撞与磁力完全无关,但设计可能会给你一些关于相互作用粒子集合建模的想法。