Я ищу алгоритм, который был бы полезен для определения x y, координаты для числа возражает для отображения на экране. Каждый объект может быть связан с другим объектом и может быть любое количество отношений и может быть любое количество этих объектов.
Нет никакого ограничения на полный размер области, на которой можно отобразиться, они возражают.
Я пишу это в php и надеялся бы хранить координаты в массиве.
Традиционные названия того, что вы хотите сделать, - это макет графика и рисование графика . В общем, это непростая задача. Диаграммы будут хорошо выглядеть, только если они плоские или почти плоские.
Один из способов сделать это - использовать псевдофизическую модель. Ваши объекты обладают силой отталкивания и силы притяжения, если они прикреплены.
Вы перемещаете объекты в соответствии с суммой приложенных к ним сил: на каждом шаге вычисляете сумму сил, приложенных к объекту, и перемещаете его в направлении силы.
В псевдокоде одна итерация будет выглядеть так:
for each object o1
force[o1] = 0
for each object o2
if o1 and o2 are linked
force[o1] += attraction_force(o1, o2)
else
force[o1] += repulsion_force(o1, o2)
for each object o1
move(o1, force[o1])
И остановить итерации, когда объекты достигли стабильного состояния.
Вам, вероятно, придется поэкспериментировать с другими законами силы. В частности, вы хотите, чтобы соседние объекты быстро достигли равновесия. Я бы поэкспериментировал с интенсивностью силы, линейной по отношению к расстоянию (например, пружина) или квадратичной (гравитационное / электрическое притяжение)
Также вам, вероятно, потребуется перемещать объекты случайным образом, чтобы не допустить, чтобы части графика оставались застрявшими . Количество случайных ходов должно быть большим для первых итераций и со временем уменьшаться.