То, на что вы хотите взглянуть, - это параметрическое уравнение для кругов. По сути, он определяет точку по периметру окружности под определенным углом. Этот ответ описывает его более подробно.
Чтобы получить значения x и y для нового круга, используйте следующие уравнения:
x = logo.x + logo.radius * Math.cos(angle)
y = logo.y + logo.radius * Math.sin(angle)
Однако вам нужно учесть комнату, которую займет новый круг, плюс любую комнату для заполнения, если хотите.
x = (logo.x + logo.radius * Math.cos(angle)) + newCircle.radius + circlePadding
y = (logo.y + logo.radius * Math.sin(angle)) + newCircle.radius + circlePadding
Для функции угла попробуйте что-то вроде этого:
var angleSingleton = {
"currentAngle": 0,
"currentOffset": 0,
"incrementAngle": function() {
this.currentAngle = this.currentAngle + this.currentOffset
}
}
angleSingleton.currentOffset = (360 * Math.PI)/xmlObj.length;
Затем вы можете использовать это, чтобы отслеживать угол, который вам нужен для формулы. Чтобы получить текущий угол, используйте angleSingleton.currentAngle
и замените angle++
на angleSingleton.incrementAngle