假设我在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);
}
}
}
}
}
答案 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弹性碰撞与磁力完全无关,但设计可能会给你一些关于相互作用粒子集合建模的想法。