Просто хочу проверить, что у меня есть моя теория, прежде чем я начну внедрять.
Константы:
-
m
= масса вершины (все равно - возможно, это значение равно радиусу node) -
k
= постоянная сила края. -
l
= длина ребра в "минимальном состоянии энергии".
Переменные
-
d
= расстояние между двумя вершинами. -
cl
= текущая длина ребра.
Теория:
Каждая вершина имеет силу отталкивания на каждой другой вершине, которая равна: m / (d^2)
. Для каждого ребра проявляется сила, при которой обе вершины "перетаскивают" их в направлении, чтобы получить край в "минимальное энергетическое состояние"; поэтому каждая вершина: -k * ((l - cl) / 2)
.
псевдокод:
until energy minimal state
for each vertex v1
for each vertex v2
if v1 != v2
v1.velocity += m / square_distance (v1, v2)
endif
end
end
for each edge e
e.v1.velocity += -k * (delta_min_energy_len (e) / 2)
e.v2.velocity += -k * (delta_min_energy_len (e) / 2)
end
for each vertex v
v.position += (v.velocty * dampening_constant)
end
end
Комментарии: Так будет ли это работать? Что я должен установить m
и k
на?