Радиан 90 градусов равен 45

Хорошо, я построил скрипку

http://jsfiddle.net/roLLqfs6/1/

Вопросы, почему я вижу, что все линии перекрываются, и почему даже когда я строю радианы из градусов, они все еще перекрываются?

var radians = 90 * (Math.PI/180); //90 degrees if I'm not mistaken

также эта диаграмма показывает радианы в диапазоне от 0 до 6,2, но в javascript я вижу числа для радианов, иногда с минусом впереди. (пример: -3.0924735724101273) что с этим делать?

введите здесь описание изображения

И это показывает минус

введите здесь описание изображения

что правильно (я полагаю, что оба они, но я нахожу себя в замешательстве относительно того, что на самом деле представляет собой диапазон)


person 8DK    schedule 24.09.2014    source источник
comment
Методы Javascript Math возвращают радианы между -Math.PI и +Math.PI. Интерпретируйте отрицательные радианы точно так же, как отрицательные градусы интерпретируются на втором изображении. Это работает, поскольку тригонометрические функции являются периодическими.   -  person Richard Ye    schedule 24.09.2014
comment
хорошо, но какой диапазон +/-?   -  person 8DK    schedule 24.09.2014
comment
перед c.lineTo используйте c.moveTo(0,0);, (второй cos до sin) Я думаю, что это эффект, которого вы пытаетесь достичь. FIDDLE   -  person Daniel W.    schedule 24.09.2014
comment
Опубликуйте соответствующие части кода JS в своем вопросе (вы можете отредактировать его)   -  person Bergi    schedule 24.09.2014


Ответы (2)


Потому что вы должны умножать на Math.sin() вместо Math.cos() для координаты Y. См. обновленный jsFiddle.

for (var i = 0; i < r.length; i++) {
    c.lineTo(
        100 + 100 * Math.cos(r[i]),
        100 + 100 * Math.sin(r[i])
    );
}
person huysentruitw    schedule 24.09.2014
comment
Если не указано иное, начальная точка каждой строки — это место, где закончилась последняя строка, верно? - person Daniel W.; 24.09.2014

Это потому, что вы дважды вызываете Math.cos для перемещения по обеим осям x и y. Таким образом, вы всегда будете рисовать диагональную линию. Измените свой второй вызов на Math.sin:

for(var i=0;i<=r.length-1;i++){
    c.lineTo(
        100+(100)*Math.cos(r[i]),
        100+(100)*Math.sin(r[i])
    );}
person Richard Ye    schedule 24.09.2014