Ткань JS заставляет все объекты притягиваться к центру холста

#javascript #node.js #algorithm #canvas #fabricjs

Вопрос:

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

Это мой текущий алгоритм:

  1. Разложите все объекты на холсте до тех пор, пока объекты больше не столкнутся, т. е. (obj1.isContainedWithinObject(obj) || obj1.intersectsWithObject(obj) || obj1.isContainedWithinObject(obj)) значение false для каждой пары объектов
  2. Выберите по одному объекту за раз и заставьте этот объект двигаться к центру холста по одному пикселю за раз и остановитесь, как только будет обнаружено столкновение. Когда объект остановлен, проделайте то же самое со следующим объектом в цикле, пока в цикле не закончатся объекты.

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

Я прилагаю изображения результата моих попыток ниже:

До:

введите описание изображения здесь

После:

введите описание изображения здесь