Почему это не круг?

Я изучаю 2D-графику и пытаюсь нарисовать круг, но получаю странную кривую.

function rotatePoint (point, centerPoint, theta) {
    point[0] = point[0] - centerPoint[0];
    point[1] = point[1] - centerPoint[1];
    point[0] = point[0]*Math.cos(theta)-point[1]*Math.sin(theta);
    point[1] = point[0]*Math.sin(theta)+point[1]*Math.cos(theta);
    point[0] = point[0] + centerPoint[0];
    point[1] = point[1] + centerPoint[1];
}

Формула вроде нормальная, но... Не знаю, не могу понять :/ ... Спасибо за помощь. http://jsfiddle.net/nQvGT/173/


person Isinlor    schedule 25.03.2013    source источник
comment
Возможно, вы передаете угол в градусах. Javascript хочет радианы. Таким образом, тета не находится в диапазоне от 0 до 360; это 0-2pi   -  person duffymo    schedule 25.03.2013
comment
Неа. rotatePoint(d, [400, 400], Math.PI*n/180); или rotatePoint(d, [400, 400], n); - без разницы   -  person Isinlor    schedule 25.03.2013
comment
Тогда ответ Гуффы, скорее всего, будет правильным.   -  person duffymo    schedule 25.03.2013


Ответы (1)


Вы меняете одно значение, а затем используете его при расчете другого значения. Вы должны сначала вычислить оба значения, используя исходные значения, а затем установить их:

var p0 = point[0]*Math.cos(theta)-point[1]*Math.sin(theta);
var p1 = point[0]*Math.sin(theta)+point[1]*Math.cos(theta);
point[0] = p0;
point[1] = p1;

Демонстрация: http://jsfiddle.net/Guffa/nQvGT/174/

person Guffa    schedule 25.03.2013