Показать сообщение отдельно
Старый 09.04.2002, 15:09
Nox Noctis вне форума Посмотреть профиль Отправить личное сообщение для Nox Noctis Посетить домашнюю страницу Nox Noctis Найти все сообщения от Nox Noctis
  № 52  
Nox Noctis
don't panic!
 
Аватар для Nox Noctis

Регистрация: Aug 2001
Сообщений: 4,121
алгоритм:
-- даны углы:
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)


Последний раз редактировалось Nox Noctis; 09.04.2002 в 15:12.