3

假设我在一个 m 像素的 2D 表面上有 p 个节点,我希望这些节点相互吸引,这样它们之间的距离越远,吸引力就越强。但是如果两个节点之间的距离,比如 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 个节点,我希望这些节点相互吸引,这样它们之间的距离越远,吸引力就越强。但是如果两个节点之间的距离,比如 d(A,B) 小于某个阈值,比如 k,那么它们就会开始排斥。

当然,您意识到这不是磁物理学的工作原理吗?

谁能让我开始编写一些关于如何随时间更新节点坐标的代码。

没有人可以给你代码来轻松地做到这一点,因为这实际上是一个难题。

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

它需要一些二维向量、数值积分、常微分方程、线性代数和物理学的知识。你知道这些吗?

即使你“制定”了自己的物理定律来控制粒子之间的相互作用,你仍然必须整合这组方程。

我建议查看 Runge-Kutta 的 ODE 系统。 “数值食谱”有一个很好的章节,即使你去其他地方实现。

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

于 2010-01-24T16:50:32.123 回答
2

这种弹性碰撞的动力学模型与磁性完全无关,但该设计可能会为您提供一些关于对相互作用粒子集合进行建模的想法。

于 2010-01-24T17:23:23.523 回答