Почему косинус используется для вычисления значений x и синуса значений y для дуги? - PullRequest
5 голосов
/ 15 августа 2010

Я пытаюсь понять математику в этой демонстрационной версии raphael.js:

http://raphaeljs.com/pie.js

Извлечь метод сектора:

function sector(cx, cy, r, startAngle, endAngle, params) {
    var x1 = cx + r * Math.cos(-startAngle * rad),
        x2 = cx + r * Math.cos(-endAngle * rad),
        y1 = cy + r * Math.sin(-startAngle * rad),
        y2 = cy + r * Math.sin(-endAngle * rad);
    return paper.path(["M", cx, cy, "L", x1, y1, "A", r, r, 0, +(endAngle - startAngle > 180), 0, x2, y2, "z"]).attr(params);
}

Этофактическая демонстрация: http://raphaeljs.com/pie.html

Моя математика немного ржавая, и я пытаюсь понять функцию сектора - учитывая параметры startAngle и endAngle (значения каждой начальной и конечной точки между 0 и 360 рисуют дугу)почему эта функция работает?

Ответы [ 4 ]

14 голосов
/ 15 августа 2010

Достаточно взглянуть на то, что на самом деле означает грех и в круге: alt text

Если у вас есть точка на окружности, которая образует угол альфа, cos альфа - это x-точка точки, а син альфа - это часть y.

Эта иллюстрация объясняет, почему угол отрицается. альтернативный текст http://i37.tinypic.com/ot3zw8.png

Это означает, что теперь вы можете указать по часовой стрелке углов, которые предпочитают большинство людей с аналоговыми часами.

9 голосов
/ 15 августа 2010

Все зависит от того, как вы относитесь к startAngle и endAngle.Похоже, что это означает, что они начинаются с горизонтальной плоскости вправо (то есть угол 0 указывает на восток) и вращаются по часовой стрелке (поэтому угол 45 градусов указывает на юго-восток.

Обычно в математике мырассмотрим углы, начинающиеся от горизонтали вправо, но увеличивающиеся против часовой стрелки ... но если вы попросите нематематика нарисовать угол, он вполне может относиться к нему по вертикали (то есть к северу), увеличиваясь по часовой стрелке.взятие смеси :) Здесь нет действительно «неправильного» или «правильного» ответа - это все вопрос определения.

Поскольку картинки популярны, вот три системы, которые я описал, каждая из которых предполагает линиюимеет длину r:

Обычная математика: против часовой стрелки от оси x

Первая диаграмма http://yoda.arachsys.com/blogfiles/so/angles-1.png

Заданиечеловек на улице, чтобы нарисовать угол (по часовой стрелке от оси Y)

Вторая диаграмма http://yoda.arachsys.com/blogfiles/so/angles-2.png

Углы, используемые этим кодом (по часовой стрелке от x-ось)

Третья диаграмма http://yoda.arachsys.com/blogfiles/so/angles-3.png

2 голосов
/ 15 августа 2010

Поскольку произвольная точка на окружности с центром (cx, cy) и радиусом R имеет следующую координату (это непосредственно следует из геометрических определений cos и sin - отношения между длинами соответствующего катета и гипотенузы):

x = cx + R*cos(a)
y = cy + R*sin(a) for  0 <= a < 2π

Таким образом, устанавливая пределы угла a, вы можете определить произвольную дугу.

1 голос
/ 15 августа 2010

Если взять 0 ° по горизонтали с увеличением x и 90 ° по вертикали с увеличением y, то как:

cos(0) = 1
sin(0) = 0

cos(90) = 0
sin(90) = 1

Вы можете изменить значение x, умножив его на косинус, а значение y, умножив его на синус.

...