моделирование магнетизма - PullRequest
3 голосов
/ 24 января 2010

Скажем, у меня есть p узлов на 2D пиксельной поверхности размером n на m, я хочу, чтобы узлы притягивались друг к другу так, чтобы чем дальше они были друг от друга, тем сильнее притяжение. Но если расстояние между двумя узлами, скажем, d (A, B) меньше некоторого порога, скажем, k, то они начинают отталкиваться. Может ли кто-нибудь заставить меня начать с какого-то кода, как со временем обновлять координаты узлов.

У меня есть что-то вроде приведенного ниже кода, который начинает привлекать внимание, но я ищу несколько советов. (П.С. Я не могу использовать существующую библиотеку для этого).

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 ]

2 голосов
/ 24 января 2010

Эта кинетическая модель упругих столкновений совершенно не связана с магнетизмом, но дизайн может дать вам некоторые идеи по моделированию ансамбля взаимодействующих частиц.

2 голосов
/ 24 января 2010

Скажем, у меня есть p узлов на двумерной поверхности размером n на m, я хочу, чтобы узлы притягивались друг к другу так, чтобы чем дальше они находились друг от друга, тем сильнее притяжение. Но если расстояние между двумя узлами, скажем, d (A, B) меньше некоторого порога, скажем, k, то они начинают отталкиваться.

Вы понимаете, конечно, что это не так, как работает физика магнетизма ?

Может ли кто-нибудь дать мне понять, как обновлять координаты узлов с течением времени.

Никто не сможет дать вам код, чтобы сделать это легко, потому что на самом деле это сложная проблема.

Вы можете численно интегрировать обыкновенные дифференциальные уравнения для каждой частицы во времени. Учитывая начальные условия для векторов положения, скорости и ускорения в 2D, вы сделаете шаг по времени, интегрируете уравнения, чтобы получить значения в конце шага по времени, обновите значения, добавив приращение, а затем выполните это снова. ,

Требуется некоторое знание двумерных векторов, численного интегрирования, обыкновенных дифференциальных уравнений, линейной алгебры и физики. Вы знаете что-нибудь о них?

Даже если вы «составляете» свои собственные физические законы, регулирующие взаимодействия между вашими частицами, вам все равно придется интегрировать этот набор уравнений.

Я бы порекомендовал посмотреть на Runge-Kutta для систем ODE. "Числовые рецепты" имеет хорошую главу, даже если вы отправляетесь в другое место для реализации.

"NR" теперь в третьем выпуске. Это немного спорный, но проза очень хорошо.

...