Ответ 1
Вы на правильных строках. Ваша терминология/физика немного сбита: то, что вы называете массой, и "k" - это нечто вроде смешения с тем, что лучше назвать "зарядом" (для отталкивания обратно-квадратного закона) и "spring константой" для привлечения внимания Гука.
Как отмечено в комментариях к вашему вопросу, вам нужно некоторое затухание, которое фактически выводит энергию из системы, иначе оно просто осциллирует преобразование потенциальной энергии в кинетическую энергию и обратно навсегда. Хуже того, проблемы точности моделирования могут легко привести к увеличению энергии на неопределенный срок, а симуляция "сойдет с ума", если вы не будете осторожны.
В этой статье wikipedia article есть хороший псевдокод, который вы найдете очень похожим на ваш, но с указанными выше пунктами (хотя обратите внимание, что даже что в псевдокоде отсутствует расхождение по массе при вычислении ускорения, см. обсуждение на странице).
Вам также нужно немного подумать об исходном распределении, с которого вы начнете симуляцию, и о том, как вы сильно заботитесь о возможности застревания в локальном минимуме, если существует (возможно) гораздо лучший глобальный минимум. Эти моменты связаны между собой; многое зависит от топологии вашего графика. Если это простое дерево, вам не составит труда получить хороший макет. Если он получил множество циклов и структуры... удачи.