Мне нужно реализовать идею кругового приближения, представляющего собой правильный многоугольник с N углами, тогда как N определяется пользователем.
Например, если N = 3, у меня будет треугольник.При n = 5 я бы получил форму, которая начинает напоминать круг.Когда я увеличиваю N, я становлюсь все ближе и ближе к форме круга.
Эта идея очень похожа на то, что задавали и отвечали на следующий вопрос / решение: Рисуем правильные многоугольникивписанные в кружок , однако они использовали raphael.js, а не D3.js.
Что я пытался сделать:
var vis = d3.select("body").append("svg")
.attr("width", 1000)
.attr("height", 667);
var svg = d3.select('svg');
var originX = 200;
var originY = 200;
var outerCircleRadius = 60;
var outerCircle = svg.append("circle").attr({
cx: originX,
cy: originY,
r: outerCircleRadius,
fill: "none",
stroke: "black"
});
var chairWidth = 10;
var chairOriginX = originX + ((outerCircleRadius) * Math.sin(0));
var chairOriginY = originY - ((outerCircleRadius) * Math.cos(0));
var chair = svg.append("rect").attr({
x: chairOriginX - (chairWidth / 2),
y: chairOriginY - (chairWidth / 2),
width: chairWidth,
opacity: 1,
height: 20,
fill: "none",
stroke: "blue"
});
var n_number = 5
var n_angles = 360/n_number
var angle_start=0;
var angle_next;
console.log(chair.node().getBBox().x);
console.log(chair.node().getBBox().y);
chair.attr("transform", "rotate(" + (angle_start+n_angles+n_angles) + ", 200, 200)");
var circle = svg.append("circle")
.attr("cx", 195)
.attr("cy", 135)
.attr("r", 50)
.attr("fill", "red");
var chairOriginX2 = originX + ((outerCircleRadius) * Math.sin(0));
var chairOriginY2 = originY - ((outerCircleRadius) * Math.cos(0));
var chair2 = svg.append("rect").attr({
x: chairOriginX2 - (chairWidth / 2),
y: chairOriginY2 - (chairWidth / 2),
width: chairWidth,
opacity: 1,
height: 20,
fill: "none",
stroke: "blue"
});
console.log(chair2.node().getBBox().x);
console.log(chair2.node().getBBox().y);
Моя идея, что это не сработало,пытался создать круг ("externalCircle"), который я бы скользил внутри окружности ("chair.attr (" transform "...") круга, основываясь на N, получая несколько различных (x, y) координат).Затем я передал бы координаты (x, y) в многоугольник.
Я считаю, что мой подход к этой проблеме неправильный. Кроме того, я застрял в том, что я не могу продолжать скольжениебез учета окружности и сохранения каждой отдельной (x, y) координаты. Я попытался "console.log (chair2.node (). getBBox (). x);", но он всегда хранит одну и ту же координату, которая имеет исходную точку.