2010-01-24 71 views
3

假設我有一個n乘m像素的二維曲面上的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

這是功課嗎? Yu可能需要解決一些DiffEq到達那裏。自己模擬它可能會不準確 - 你必須擔心速度等。等一下 - 這些節點有質量嗎?這是非常重要的,因爲無質量模擬更容易做到。 – 2010-01-24 16:51:14

+0

你可以從這個傢伙的代碼借用想法 – 2010-01-24 16:53:42

+1

http://www.myphysicslab.com/runge_kutta.html – 2010-01-24 16:55:02

回答

2

彈性碰撞的這種kinetic model與磁性完全無關,但設計可能會給你一些關於建模相互作用粒子的集合的想法。

+0

非常好,那就是我一直在尋找的東西,完全沒有磁性,所以感謝您仔細閱讀我的帖子:D – dangerstat 2010-01-24 17:46:57

2

說我有由m個像素的2D表面的N p個節點,我想的節點被吸引到彼此,使得進一步它們分開的強的吸引力。但是如果兩個節點之間的距離,比如d(A,B)小於某個閾值k,那麼它們開始排斥。

您意識到,當然,這不是physics of magnetism的工作方式嗎?

任何人都可以讓我開始一些關於如何隨着時間的推移更新節點的座標的代碼。

沒有人能夠讓你輕易做到這一點,因爲這實際上是一個難題。

隨着時間的推移,您可以對每個粒子的常微分方程進行數值積分。給定2D中位置,速度和加速度矢量的初始條件,您需要花費時間步長,對方程進行積分以在時間步驟結束時獲取值,通過添加增量更新值,然後再次執行。它需要一些二維矢量,數值積分,常微分方程,線性代數和物理知識。你知道這些嗎?

即使你「組成」你自己的控制粒子之間相互作用的物理定律,你仍然必須整合這套方程。

我建議在ODE系統中尋找Runge-Kutta。 "Numerical Recipes"有一個很好的章節,即使你去其他地方執行。

「NR」現已進入第三版。這有點爭議,但散文很好。

+0

感謝您的答覆,我會快速瀏覽NR。我知道這不是磁性如何工作,因爲這個話題有點棘手,它是我能想到的最好的標題:D – dangerstat 2010-01-24 17:10:11