|
программное рисование во flash mx. управление кривыми. (часть ii)Теперь вспомним про описанные вначале переменные div и delta: div = ceil(6*(EndAngle-StartAngle)/PI); delta = (EndAngle-StartAngle)/div; Переменная div показывает, какое количество дуг нам нужно взять при условии, что каждая из них не больше PI/6 радиан (в случае, когда углы не заданы как аргументы метода, div = (2*PI-0)/(PI/6) = 12, что является её значением по умолчанию). А переменная delta - сколько радиан точно составляет каждая дуга (по умолчанию delta = (PI*2-0)/12 = PI/6). Как Я уже говорил в первой части статьи, из параболы эллипс можно получить только с определённой долей приближения. Чем больше кривых curveTo() мы используем, тем более точное получаем приближение. Если для создания дуги в PI/6 радиан будет использована одна curveTo(), то точность приближения будет 927/1000, что Я считаю вполне достаточным. Если вам этого мало (много), просто разделите в строке div = ceil(6*(EndAngle-StartAngle)/PI) выражение (EndAngle-StartAngle) на меньший (больший) угол, а также измените значения по умолчанию div и delta. Скажу лишь, что если на PI/36 радиан отводить одну кривую curveTo(), то точность будет составлять 9997/10000. Так что брать ещё меньший угол вряд ли имеет смысл. И в завершении передачи аргументов для случая рисования дуги: if (arguments.length == 4){ ARadAngle = PI*arguments[3+t]/180; }; }; }; Проверка, задан ли четвёртый аргумент - угол наклона. И закрывающие фигурные скобки. Итак, на данный момент код программы выглядит так: movieClip.prototype.ellipseTo = function(){ var t = arguments[0][0] == undefined ? 1 : 0; var CenterX = arguments[0+t][0]; var CenterY = arguments[0+t][1]; var Dir = 1; var ARadius; var BRadius; var StartAngle = 0; var EndAngle = 0; var ARadAngle = 0; var div = 12; var delta = Math.PI/6; if (t == 1 && (arguments[0] == -1 || arguments[0] == 1)){ Dir = arguments[0]; } if (arguments[1+t][0] == undefined){ ARadius = BRadius = arguments[1+t]; } else { ARadius = arguments[1+t][0]; BRadius = arguments[1+t][1]; }; with (Math){ if (arguments.length > 2+t){ if (arguments[2+t][0] == undefined){ ARadAngle = PI*arguments[2+t]/180; } else { StartAngle = PI*arguments[2+t][0]/180; EndAngle = PI*arguments[2+t][1]/180; if (ARadius != BRadius){ if (cos(StartAngle)<0){ StartAngle = PI+atan(ARadius*tan(StartAngle)/BRadius); } else if (cos(StartAngle)> 0){ StartAngle = atan(ARadius*tan(StartAngle)/BRadius); }; if (cos(EndAngle)<0){ EndAngle = PI+atan(ARadius*tan(EndAngle)/BRadius); } else if (cos(EndAngle)> 0) { EndAngle = atan(ARadius*tan(EndAngle)/BRadius); }; }; while (!(EndAngle > StartAngle)){ StartAngle -= 2*PI; }; while (EndAngle-StartAngle > 2*PI){ EndAngle -= 2*PI; }; div = ceil(6*(EndAngle-StartAngle)/PI); delta = (EndAngle-StartAngle)/div; if (arguments.length == 4){ ARadAngle = PI*arguments[3+t]/180; }; }; }; Продолжение статьи: ч.1 Продолжение статьи: ч.2 Продолжение статьи: ч.3 Продолжение статьи: ч.4 Продолжение статьи: ч.5 Продолжение статьи: ч.6 Продолжение статьи: ч.7 Продолжение статьи: ч.8 Продолжение статьи: ч.9 Продолжение статьи: ч.10 Продолжение статьи: ч.11 Продолжение статьи: ч.12 Продолжение статьи: ч.13 Продолжение статьи: ч.14 Другие статьи по теме: - неожиданные применения flash- программное рисование во flash mx. управление кривыми. (часть ii) - использование flash, javascript и fscommand. - создание элементов сайтов с использованием flash - Flash переменные и их использование |
|
2006-2024 © SMTI.RU Главная страница | Связаться с нами |