алгоритм:
-- даны углы:
strt - начальный угол дуги
end - конечный угол дуги
-- дан радиус '
r '
-- дано положение центра окружности
(cx, cy)
ставим начальное положение:
moveTo(cx+r*Math.cos(strt*rad), cy+r*Math.sin(strt*rad));
где rad = Math.PI/180; (перевод в радианы)
конечное положение аналогично:
{x:cx+r*Math.cos(end*rad), y:cy+r*Math.sin(end*rad))}
положение управляющей точки:
l = r/Math.cos((end-strt)/2*rad);
длина отрезка между центром окружности и контрольной точкой
controlPoint.x = cx + l*cos((strt+end)/2*rad);
controlPoint.y = cy + l*sin((strt+end)/2*rad);
все
поставили moveTo в начальное положение
и сделали curveTo(controlPoint.x, controlPoint.y, конечное.x, конечное.y)