Я уже МНОГО исследовал эту тему.
[ПРИМЕР 1]
Когда объекты прямые, я могу без особых проблем расположить их в центре, используя формулу:
- targetX: (Circle3X + Circle7X)/2 - (targetWidth/2);
- targetY: (Circle3Y + Circle7Y) / 2 - (targetHeight / 2)
Затем получаем:
rectSvg.setAttribute("transform", "translate(" + targetX + "," + targetY + ")")
[ПРИМЕР 2]
Проблема возникает, когда элементы круга находятся на диагональной линии, где прямоугольный элемент, который мне нужно расположить, должен быть соответственно повернут. Используя ту же формулу выше, прямоугольный элемент никогда не остается точно в центре между кругами (похоже, что он находится в центре, но это не так). Атрибут преобразования в этом случае:
rectSvg.setAttribute("transform", "translate(" + targetX + "," + targetY + ") rotate(6.2)");
ИЗОБРАЖЕНИЯ ПРИМЕР 1 И ПРИМЕР 2
Ради Бога, кто может помочь мне расположить этот элемент в центре по диагонали?
Примечание. Я создаю svg на сервере (jsdom lib на node.js), поэтому у меня нет клиентских методов, таких как: getBoundingClientRects, getBBox и т. д.
Спасибо вам большое за ваше внимание.
Фрагмент кода расчета X и Y окружностей
var circle3X = dom.window.document.getElementById('circle3').getAttribute("cx");
var circle3Y = dom.window.document.getElementById('circle3').getAttribute("cy");
var circle7X = dom.window.document.getElementById('circle7').getAttribute("cx");
var circle7Y = dom.window.document.getElementById('circle7').getAttribute("cy");
var centerX = (circle3X + circle7X) / 2 - (rectWidth / 2);
var centerY = (circle3Y + circle7Y) / 2 - (rectHeight / 2);
rectSvg.setAttribute("transform", "translate(" + centerX+ "," + centerY + ") rotate(16.3)");