заглянув внутрь первой ссылки, которую вы указали, есть строка 240:
var repulsiveForce = this.k * this.k / d;
, которая представляет потенциал отталкивания (это физика).Чем больше это число, тем менее вероятно геометрическое состояние.d
- это расстояние между двумя узлами, а this.k
- это жесткость пружины.Этот потенциал становится бесконечным для расстояния d = 0
.
. Вы хотите перевести этот потенциал на определенную длину (размер ваших ящиков), поэтому замените d
на d - length
.Это означает, что сила отталкивания становится бесконечной на расстоянии length
.По-прежнему остается проблема, заключающаяся в том, что силы отталкивания затем уменьшаются для расстояний, меньших length
, которые должны быть покрыты некоторыми условными выражениями:
if (d + 0.0001 < length) repulsiveForce = bigbigNumber;
Я добавил 0.0001
, чтобы сила отталкивания никогда не становиласьбесконечный, но только большой, потому что компьютеры не очень хорошо справляются с бесконечностью.