Сначала вы применяете измененное x значение, чтобы получить y.Это просто неправильно.Вместо этого запомните старое значение и используйте его.
var tempx = x;
x = (x * Math.cos(theta)) - (y * Math.sin(theta));
y = (y * Math.cos(theta)) + (tempx * Math.sin(theta));
Второе: повторное использование тех же значений вызывает накопление ошибок, поэтому радиус может сходиться - именно так, как вы видите.Таким образом, более точный подход заключается в сохранении начальных значений и их повороте с использованием текущего угла (не разности углов)
var x0 = 1;
var y0 = 1;
in the loop:
x = (x0 * Math.cos(theta * i)) - (y0 * Math.sin(theta * i));
y = (y0 * Math.cos(theta * i)) + (x0 * Math.sin(theta * i));