Вот исправленный код. Обратите внимание, что вы можете использовать команду arc path вместо кривой в SVG. Также обратите внимание, что приведенный ниже код обрабатывает первый узел и последний узел как равные, создавая впечатление, что он генерирует один дополнительный узел. Это предполагает, что все ваши произвольные фигуры закрыты, то есть их первый узел и последний узел равны, что не может быть гарантировано просто командой «закрыть путь» (Z).
var path, paper, circle, radius;
radius = 150;
paper = Raphael("canvas", radius * 4, radius * 4);
path = drawCircle(8) //can be any number
function drawCircle(nodes) {
var newPath = []
for (var i = 0; i <= nodes; i++) {
var deg = (i*1.0 / nodes) * 360;
var x = Math.cos(deg * Math.PI / 180) * radius
var y = Math.sin(deg * Math.PI / 180) * radius
if (newPath == 0) newPath.push("M " + x + " " + y)
else newPath.push("A " + (radius) + "," + (radius) + ",0,0,1," + x + "," + y)
}
newPath.push("Z")
console.log(newPath)
paper.path(newPath).attr({
"fill": "#000"
}).translate(200, 200)
}