Главная Контакты


  На сайте

  Java, JavaScript
  Документация Perl
  Документация PHP
  Документация ASP
  Новости сайта
  Flash
  Интернет протоколы
  Apache
  Уроки программирования
  Язык программирования C
 


программное рисование во 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;
};
};
};

Другие статьи по теме:

- создание элементов сайтов с использованием flash
- использование flash, javascript и fscommand.
- Flash. кривые безье — основа основ
- Flash для чайников
- Flash баннер


Голосование:
Чего Вы хотели бы видеть больше на сайте?

Статей, документации
Скриптов
Программ для вебмастера
Я не знаю



Другие голосования

Обмен кнопочками:



Приглашаем Вас обменяться кнопочками! Обращайтесь к администратору.


Новые статьи:


Наши партнеры:





2006-2024 © SMTI.RU
Главная страница | Связаться с нами