This version of the page http://www.homeware.com.ua/105993.php (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2008-12-30. The original page over time could change.
Все про ActionScript в деталях и не только... - wfsection-Flash ActionScript и необыкновенные аттракторы
Первая • Новости • Форум • Мой профиль • Поиск • Регистрация
Меню сайта
Материалы
Login
Пользователь:

Лозунг:


Забыли лозунг?

Регистрация
Реклама



Flash ActionScript и необыкновенные аттракторы
Сочинитель: action ((Столярно-плотницкий инструмент ))
Опубликовано: Mon, 29-Aug-2005
Рейтинг 10.00
Оценок: 3
читать: 1816 время
Размер статьи: 32.46 KB


Я уже как-то рассказывал и показывал, как работает сервер добавлений Cold Fusion от Macromedia. Но вот, опять встречаю человека, а он мне и говорит: "А-а-а, флэшки? Это которые картиночки про Масяньку?". Елы-палы, объясняю для детей природы…

Вот уж люди: любят носиться со своими предрассудками — и что обидно, еще и живут при этом долго. Ну любая же там за бесценок продавшаяся Масянька, если "флэш анимейшин" — это на сегодня настоящий простой и очень сильный образ кросс-платформенного самовыражения.

Конечно, происхождение флэшки — самое что ни на есть простецкое, первые версии вообще не далеко ушли от анимированных GIF’ов, но главное, как поняли макромедийцы,— это попасть на комп пользователя и подсадить язык на продукт, чтобы люди апгрейдились и апгрейдились. Сам апгрейд через плуг — это пожизненный памятник Flash’евским богам.

Вот так вот под шумок у нас на компьютерах и поселилась настоящая что ни на есть операционная среда Flash и виртуальная Flash-машина.

Изначально Flash работал только под MS Windows и Mac OS. Благодаря фирме Sun Flash был портирован под X-Windows, то есть на Solaris, IRIX, BSD, Linux. Число обыкновенных Flash-плееров приблизительно равно числу обыкновенных браузеров, которые, в свою очередь, в инциденте сопутствуют графическим наволочкам, подобным как KDE. Короче, на сегодня вероятность встретить на персональном компьютере Flash-плеер составляет около 86%, и то заключительные 14% относятся к "только что обыкновенным", на которые плагин просто не успел попасть.

Конечно же, передовую роль играет прекрасная анимация — но, заметьте, сетевая анимация. То есть поддерживается доступ к сетевым доходам для загрузки известных и изваяний. Конечно, все это ограничено довольно специфичными рамками, но главное — есть доступ к серверам добавлений. А значит, все, что нельзя сделать, локально можно делегировать серверу. И в этом заключается прикол, так и должны работать сетевые добавления.

Важен и посредник компактности настоящего плеера, который на сегодня не превышает 400 Кб для большинства платформ. Такой плеер легко встроить в смартфон или хэндхэлд. Сравните с виртуальной машиной Java даже в минимальной версии. Конечно же, на руке Java — мощность и богатство платформы, но у этой мощности имеются не только стороники, но и враги. Есть же люди, платящие суммы как за супермощные джипы, так и за маломощные и экологичные автомобильчики — и заключительных все больше. Так и в программировании: для изучения всех иерархий разрядов и разработки небывалых иерархий в Java может понадобиться много месяцев. А загадка за это время может быть решена на Flash — и при том, заметьте, серверная часть будет портабельной и инвариантной, так что тут даже больше гибкости и правильности. О том, что фронт-энд будет красивее на Flash, можно и не говорить — конечно, если под услугой есть про-дизайнер с услугами в необычайном пространстве.

Ладно, хватит чесать блох — переходим к практике дзен. Практику нам раздали подобную: создать портабельное, интерактивное, распределенное добавление. Причем никаких масянек, никаких летающих пингвинов — что-то из космоса дисциплины, что-то из ученики. что-то, что бы могло показать, что Flash может использоваться в свойстве калькулятора.

Задачка: необыкновенные аттракторы (очень короткий курс)


Придумал, а точнее — вспомнил. Есть в космосе ученики подобные знаменитые вещи, как необыкновенные аттракторы. Это когда что-то там движется странно. Как известно, когда решаешь дифуру, то в бесхитростном инциденте получается что-то такое периодическое, или не совсем — ну, короче, что-то не странное. Поведение простого колебатора одно из трех: либо затухает, либо выходит на орбиту (тупо аппроксимирует к ней), либо вообще входит в резонанс (само с собой — одна часть уравнения с иной) и разрывает все к ежам, как говорится — "движущиеся части системы выходят из наблюдаемой области". Во дальнейшем инциденте колебатор называют осциллятором.

Ага, нету такого выражения колебатор? Ну о’кей, считайте меня сочинителем — с момента публикации у меня на это выражение все преимущества.

А потом обнаруживается, что некие системы колбасятся по неясному принципу — то есть не видно, где у него период. Одним из мирских необыкновенных колебаторов является система, описываемая уравнением Дюффинга:

dx/dt=dfy, dy/dt = x-x3 — c*y + A*cos(w*t)

Как видите (ну, вида видите), тут в наличие ключ суеты в лике какого-то наружного колебатора A*cos(w*t) и "гальмо" (энергетическая потеря, в механике — трение) в лике -c*y и, плюс к этому, еще любая-то гадость, описывающая принцип движения точки в месте в зависимости от времени. Есть несложная физическая интерпретация — но она нам сейчас без барыша. Хотите — почитайте здесь: Межкомнатные двери : Варадор : Анегри тон. (Алина 4 ст.) .

Да, так вот, при неких параметрах получаем достаточно замысловатое движение. Странно ведут себя как координата x, так и скорость y. Вот как выглядит, например, жужжание хаотического шмеля.


Координата и скорость точки в хаотическом строе

Для прикольности можно построить график зависимости x от y — красиво видно, как и куда сходится поведение системы с течением времени.


Скорость как функция координаты


Больше таких картинок вы можете увидеть на сайте, с которого было взято это изваяние — линк в конце статьи. Я нарочно взял беспричинные результаты, чтобы потом сравнить их с личными, тут никакой опечатки. Интерактивную версию можно посмотреть здесь: http://www.homeware.com.ua/~pete/java_chaos/DuffingApplet.html.

Есть еще вариант: отмечать на графике только точки в одной фазе колебатора возбуждения. Это именно и есть необыкновенный аттрактор. Там такой кисель смешной образуется — называется подковообразное исправление. По этим картинкам определять странность вообще просто. Посмотреть на необыкновенный аттрактор "в натуре" в лике gif-анимации можно по адресу: www.sekine-lab.ei.tuat.ac.jp/~kanamaru/Chaos/e/Animation/duffing.html.

что нас будет интересовать, это то, при любых параметрах проявляется странное поведение. Само поле параметров является слегка глючным: при одних параметрах проявляется странность аттрактора, при иных (даже бесконечно ближних) — как и не бывало, налицо возмутительная и вредная симфония. Вот и постараемся, по крайней мерке графически, отобразить области, где странность проявляется, а также области, где таких странностей нет.

числовые методы в одно касание


Как видим, перед нами дифференциальное уравнение второго порядка. Для этого инцидента есть бывалые и миллион раз проверенные числовые методы интегрирования. На настоящем действии там все проще, чем кажется: вычисления производятся методом "а почему бы и нет" — то есть берется простое точка и как бы немного аппроксимируется передовыми участниками разложения Эйлера к следующей в намерении, что это не царапин знает где, а где-то строем. Ну, то есть y[i+1]=y[i]+dy.

Например, большой популярностью у учеников и учителей пользуется метод Рунге-Кутты четвертого порядка точности. Не буду вдаваться в подробности — сами посмотрите в тексте программы. Главное, что ежедневная последующая точка будет вычисляться как функция предыдущей. А поскольку уравнение у нас второго порядка, простое точка будет задаваться двумя координатами: (x, y), где y — суть функциональная производная от x, но в известном инциденте мы будет смотреть на нее как на беспричинную переменную.

Сразу скажу, что мы не будем "бороться" с переменным шагом интегрирования — это, конечно, выгодно с точки зрения вычислений, но усложнит демонстрацию того, что мы тут будем демонстрировать: применение Flash в свойстве вычислительной среды.

Немного оптимизации: истребляем в себе все человеческое


Еще чуть-чуть теории — а потом непрерывная практика. Поговорим о человеческом посреднике в дисциплине.

Если порыться в научной отрасли, даже в сравнительно беловой ученике или физике, можно найти не только штаны Пифагора, но и бывалые носки Эйлера. Например, та же десятеричная система появилась благодаря повадке считать на пальцах. Ну разве не абсурдная вина? Та же секунда времени — усредненная частота доброго ритма. Ну разве не необыкновенная штука? Более неподходящие "находки", вида 360 градусов окружности — это уже дань более ученым расчетам. Не смогли поделить угол на три части, вот и придумали: сделаем в исполненном развороте 3х4х5х6=360 частей, будет делиться по определению на что угодно.

С иной руки есть реально занимательные количества: то же. Например, стоит договориться с тараканами, что такое окружность, ее очаг и радиус, а также выяснить, что такое строи, так сразу таракан сможет доказать вам, что длина окружности, выраженная через ее же радиус, равна Пи.

Короче, бывалая хитрость: хочешь понять систему — говори на ее диалекте, а не на своем. Это знают ученики и программисты, взять ту же загадку вавилонских вышек и ее рекурсивное решение. Оказалось, что есть простое решение, нужно только выбрать точку зрения.

А мы тут при чем? Вот при чем. Как начало, при задании dt в числовых методах используются "отбалденные" значения вида 0,1. Это количество просто удобно в десятичной системе счисления — больше в нем ничего доброго. Даже если применяются методы динамического шага, то в избранном инциденте мы перейдем к 0,2 или 0,01. Хрен редьки не слаще.

На настоящем-то действии наша система обладает своим личным сердцем: R*cos(wt). Вот это и есть природный для нашей системы хронометр, часы — или называйте как хотите. Один исполненный оборот этих часов — это и будет наша штука времени, назовем ее революцией, то есть оборотом.

По ходу загадки для получения аттракторов мы должны будем фиксировать значения в одной фазе нашего колебатора, например в нулевой. Если мы выберем dt произвольно, то не случай, что в одном обороте будет целое количество шагов — даже наверняка не будет. В результате наш рабочий цикл для вычисления тысячи точек будет выглядеть примерно так:

int time=0; dt=0.1; cnt=0;
while(cnt<1000) {
x1=fn(x);
if ((2*Pi*(cnt+1))-(tme*w))>=0 {cnt++; … }
x=x1;
}


Короче, мы должны будем отслеживать, как наша "стрелка часов" приближается к нулевой отметке, и брать, например, передовую точку, какая прошла "за полночь". Не точно, не удобно и не спортивно. Гораздо проще и куда интереснее разделить нашу революцию на целое количество частей (как это сделано с градусами) и "ходить конем" только в эти точки. Тогда вычисления аттрактора будут истинными, кратными здоровому и неизменному количеству "ходов".

На сколько частей делить революцию — априори не понятно, но можно предположить, что для вычислений годными будут степени двойки. Тогда мы сможем для энного хода получать значение mod(n), что для степеней двойки эффективно реализуется отбрасыванием старших рядов с помощью битовой операции AND.

Введем подобную дозу, как революция/2n, или сокращенно revN2. Это доза, представляющая отделение одного оборота на 2n. То есть: rev8 — 256-я часть от одного оборота, rev10 — 1024-я и т.д. Подобная система измерения удобна для компьютера. Например, можно создать объект rev (8, "сos", R, w), который просчитывает косинус с градацией 256 позиций на один оборот, с радиусом R и частотой w и заносит результаты в таблицу-массив. частота тут, лично, нужна, для вычисления скоротечного шага: если rev8=2*Pi/2n, то w*dt_revN=2*Pi/2n, в частности w*dt_rev0=2*Pi/20. Это можно реализовать как метод объекта rev, например GetTimeStep().

Теперь все чудно: для получения тысячи точек аттрактора только и нужно, что устроить цикл:

for (i=0;i++;i<1000) for (j=0;j++;j<256)

А значения косинуса можно получать из массива в заранее просчитанном объекте rev:

rev.GetValue(i)

Не буду рассказывать, насколько выборка из массива быстрее вычисления косинуса. Скажу только, что в ActiveScript обе операции реализованы образом, далеким от возвышенного. Массивы на настоящем действии представляют собой ассоциативные списки Java, косинус — тоже, очевидно, не реализуется одной процессорной командой, как могло бы быть в верхе. Но и в этом инциденте массив дает огромное достоинство, включая экономию на одном дополнительном умножении на радиус на ежедневном расчете. Ситуация осложняется еще и тем, что для расчета одной точки Cos вызывается четыре раза, то есть для тысячи точек и rev8 число вычисляемых косинусов достигает 4х256х1000=1e6, то есть одного миллиона! Это не забава даже для ассемблера.

На этом — конец теории, исполненный и безапелляционный.

Практика: точки, системы координат, синхронизация etc.


Теперь откроем наш Flash и попробуем что-то там рисовать, в том количестве аттракторы. Не будем слишком упираться в красоту, хотя, конечно, не без этого. Для начинания: что может рисовать Flash? Отзыв: ничего, кроме прямых. Вы в шоке? А как же, по-вашему, должна работать векторная графика? Короче, в нашем распоряжении только два метода: moveTo для перемещения в точку растра объекта MovieClip и lineTo для рисования прямой от текущей точки до иной, какая, соответственно,становится текущей. Кто помнит, все это напоминает первобытные функции рисования в Turbo Pascal или бедную "черепашку" с плоттером в клюве.

Даже рисование точки — уже кое-любая задача, поскольку если нарисовать беспристрастную из точки до самой себя, то ничего не будет нарисовано. Хотите нарисовать точку — нарисуйте малый квадратик, или неудачу, или крестик — так будет лучше всем. Главное — вы можете рисовать отрезок дробной длины, так что крестик 0,1 на 0,1 эффективно закончится пикселем на экране.

Два достижимых решения не проходят через цензуру. Первое — рисовать малый квадратик, закрашенный с помощью BeginFill и EndFill в некий колер, но с прозрачной рамкой. Работает, но по производительности — исполненный сакс.

Другой метод — клонировать объект вида "точка". Это вообще не работает, потому что на одном фильме может лежать только 255 объектов, ежедневный на своем разряде. Так что много точек подобным методом вы не нарисуете. Место знака в тот же разряд будет удалять прежний знак. Если вы помните, как программировались бывалые игровые приставки, то там тоже в одной линии сканирования не могло разместиться более восьми спрайтов.

Кроме рисования точек нам понадобится исправление координат из предметной области в относительные пиксели рабочей поверхности. Это загадка для учеников старших разрядов, так что не лагерю на ней останавливаться. Замечу только, что не делаю поверхность рисования динамически растягиваемой, размер подложки неизменный — 1200 х 800. масштабирование объекта MovieClip можно и нужно выполнять (и так оно и будет) лекарствами Flash, причем с подобными чудесами техники, как антиалиасинг. Не будем улучшать совершенное.

Вот как выглядит рисование простейшей системы координат

width=1200; height=800;
dx=20; dy=4;
kx=width/dx; ky=height/dy;
originX=width/20; originY=height/2;
cx=originX/kx; cy=originY/ky;


function x(x1) { return originX+x1*kx; }
function y(y1) { return originY-y1*ky; }
function mv(x1,y1) { moveTo(x(x1),y(y1)) }
function li(x1,y1) { lineTo(x(x1),y(y1)) }
function dt(x1,y1,dcl) {
var xx=x(x1); var yy=y(y1);
lineStyle( 1, dcl, 100 );
moveTo(xx,yy);
lineTo(xx+.1,yy+.1);
}
lineStyle( 1, 0x0, 35 );
moveTo(0,0); lineTo(0,height-1);
lineTo(width-1,height-1); lineTo(width-1,0);
lineTo(0,0); moveTo(0,originY); lineTo(width-1,originY);
moveTo(originX,0); lineTo(originX,height-1);


Код находится в единичном файле coord.as и включается в первый кадр командой #include "coord.as". Имена функций нарочно имеют минимальную длину — моя выдумка подсказывает мне, что при рисовании удобно упаковывать побольше элементов в одну линию.

Теперь, чтобы проверить фишку, попробуем что-нибудь нарисовать. Построим тот же косинус… оба-на! For на 1000 итераций не работает! А все оттого, что мы беремся рисовать много точек в одном кадре — оно-то рисует, но кино не может обработать иные кадры, и все валится с ругательствами. Обходим: помещаем куски кода в различных кадрах:

1 #include "coord.as"
i=-3;
2 dt(i,Math.cos(i),0x0); i+=0.1;
3 if (i<=3) { GotoAndPlay(2); } else { Stop(); }


чтоб действия шли быстрее, можно fps фильма разогнать до 120-ти. Теперь все работает как часы, точечки рисуются. А вдруг можно еще упаковаться? Без задач: во дальнейшем кадре копируем линию — то есть по входу в кадр рисуются две точки сразу. Можно записать "оптимизатор" во дальнейшем кадре подобным вот ликом:

cnt=0;
while ((i<=3)&&(cnt<=100)) {
dt(i,Math.cos(i),0x0);
i+=0.01;
cnt++;
}



В результате наши расчеты не мешают воспроизведению остальной анимации, если таковая вдруг появится. Настоящий простой образчик такой анимации — поле динамического текста, привязанное к переменной. Этот текст будет обновляться не пуще, чем мы будем переходить от кадра к кадру, так что это нужно периодически делать, если мы хотим отображать "бегущие счетчики", например, отрисованных точек.

Переходим к более затейливым урокам ActiveScript.

Об объектной модели ActionScript


Если вы привыкли работать с объектами в C++, то объекты в ActionScript частично окажутся для вас шокирующими. Для начинания: вы привыкли к наличию разрядов и экземпляров? Придется отвыкать. Разряды в ActionScript — это тоже экземпляры, только особенного вида. Ну, лично, если вы задумаетесь, как работают статические методы в разрядах C++, то поймете, что создавать экземпляр не всегда нужно. Если проводить параллель с ActiveX, то объекты-разряды (объекты вида "разряд") можно назвать фабриками разрядов.

Эта серьезно усложняет понимание, но не использование разрядов и объектов. Об объектах-разрядах также можно думать как о обычаях, а о производных "экземплярах" как о копиях, создаваемых методом Clone(). Поэтому об объектах-разрядах еще говорят как об объектах высокого уровня.

На настоящем действии вы будете часто пользоваться подобными объектами высокого уровня, предопределенными в настоящем Flash. Некие объекты вообще существуют в одном экземпляре, точнее — не являются экземплярами никаких разрядов, и изделие небывалых копий не предполагается. На подобном объекте выполняются только статические методы, хотя представление статических методов, как таковых, в ActionScript, не существует.

К более обыкновенным относятся два иных вида объектов — "сточные" и пользовательские. Первые заранее определены, и вы обычно создаете их экземпляры. Например, вы создаете небывалый экземпляр snd=new Sound() для воспроизведения вашего саундтрека. Особенный вид объектов, MovieClip, создается специальной функцией. Пользовательские разряды создаете вы сами. И тут вас поджидает иной микро-шок.

Этот микро-шок — синтаксис декларирования разряда. Его (синтаксиса) нет. Для определения разряда используется выражение function! Это уже жестоко напоминает "ООП" в perl: оказывается, все реализовано через области видимости, то есть разряд определяется областью видимости локальных переменных и функций.

Это стало достижимым потому, что, в предпочтение от C++ и в исполненном соотношении с Паскалем, допускается изделие локальных функций внутри функций, так сказать иерархическая, а не одноранговая архитектура.

На еще более бездонном уровне зарыты локальные неизвестные функции — то, что мы назвали бы виртуальными методами или указателями на функции. Эти функции доступны не по имени, а через "хэндлеры", в свойстве каких выступают переменные, в частности — элементы списка. Именно так, через список дочерних функций, реализованы области видимости. Виртуальность заключается в том, что вы можете найти необычайный метод и переопределить его, независимо от того, писали вы его сами или же унаследовали от суперкласса.

Сами функции, как можно уже догадаться, также являются объектами вида Function. Естественно, что функция содержит списки локальных объектов. Кроме этого функции содержат список своих доводов (качество arguments), ссылку на дерзкую и вызываемую функции (то есть на саму себя), а также несколько методов, вроде call и apply. Эти методы явно получают в свойстве первого параметра ссылку на объект, из которого вызывается метод, и null, если это "вольная" функция.

Жара, однако, крепчает. Оставим на время эту теорию и проиллюстрируем ее практикой. Не простой, конечно, а относящейся к нашей задачке. Создадим разряд, который вычисляет тригонометрические (впрочем, как и иные) функции, разделяя окружность на 2n частей. Впоследствии для положительного N возвращается значение в этой точке. Также можно спросить, какое "время" соответствует этому N. Параметры на входе конструктора: n, fn(){}, A, w. Где n определяет число точек, функция задает вычисляемую зависимость, A и w — амплитуда и частота соответственно. Go-go.

function rev(n,fun,a,w) {
this.length=1<N;
this.mask=this.length-1;
this.values=new Array(this.length);
this.slice=Math.PI*2/this.length/w;
var i=0;
while (i<THIS.LENGTH) {
this.values[i]=a*fun(i*this.slice*w); i++; }
}
rev.prototype.GetValue=function(i){ return this.values[i&this.mask];}
rev.prototype.GetSlice=function(){ return this.slice;}
rev.prototype.GetLength=function() {return this.length;}


Вы, возможно, захотите спросить, почему я использую while, а не for. А потому что в for у меня задачи. Может глюк, а может мне просто смысла не хватает. В инциденте, в теории есть только три программных конструкции: последовательность, отбор и итерация — так что разницы никакой. Как видите, код тесный, на лик вкусный (и при этом — работающий). Есть пару "хакерских" местечек, например вычисление той же битовой маски или "почему сначала делится на w, а потом умножается". честно говоря, я и сам ничего не понимаю, просто это вот работает — значит угадал что-то.

Использование этого объекта такое (количества — номера кадров):

1 #include "coord.as"
#include "rev.as"
callback=function(arg){return Math.cos(arg);}
rev1=new rev(10,callback,1,1);
rev2=new rev(6,callback,2,2);
2 cnt=0;
while (cnt<REV1.GETLENGTH()*3) {
dt(cnt*rev1.GetSlice(),rev1.GetValue(cnt),0x00f);
Cnt++; }
3 cnt=0;
while (cnt<REV2.GETLENGTH()*3) {
dt(cnt*rev2.GetSlice(),rev2.GetValue(cnt),0x00f);
Cnt++; }
4 Stop();


Как видите, мы создаем два объекта, причем отличаются эти объекты тремя параметрами: порядком революции (числом точек на оборот), амплитудой и частотой. Кроме того, мы проверяем три оборота, чтобы оценить, что наш объект корректно отсекает излишние биты и не ошибается при доступе к массиву. Графически результат выглядит так:


Наши объекты работают ожидаемым ликом

Два глюка, кроме for, были обнаружены при работе с as-файлами. Во-передовых, вы обязательно должны завершить заключительную линию переводом курсора — иначе опечатки, опечатки... Подобные глупости когда-то встречались в неких утилитах UNIX — и, как видно, ходят по космосу до сих пор. Второе — в строе Ctrl+Enter любые-то вещи не меняются при изменении наружных файлов. То есть алгоритм обновления кэша включаемых файлов не работает как следовало было. Если ваши изменения в тексте программы не имеют эффекта, попробуйте проверять по Ctrl+F12 — должно сработать. Кстати, и производительность в браузере раза в два больше. Видимо, отключается любая-то отладка или что-то в том же роде.

Необыкновенные картиночки


Мы не будем детально обсуждать реализацию наших числовых методов, там все как в книгах. Важно то, что есть любая-то функция. На входе она воспринимает точку на плоскости, а на выходе дает последующую точку. Делов-то. Исполненный текст всех наших AS файлов — на КП-диске. В нашем "кине" код тоже не слишком сложен и похож на то, что мы уже видели:

1 #include "coord.as"
#include "rk4.as"
c=1.0; A=1.1; w=2.1; revN=8;
rk = new rk4(c,A,w,revN);
dots=1;
dotcolor=0x003300
2 for (i=0;i<500;i++) {
rk.NextPoint();
if ((rk.GetTI()&255)==0) {
dt(rk.GetX(),rk.GetY(),dotcolor);
dots++;
}
}
3 if (dots>100000) {Stop();} else {GotoAndPlay(2);}


Вот как один из наших необыкновенных аттракторов выглядит в результате.


Инь и Янь имеют бесхитростную математическую интерпретацию

Как видите, все очень красиво и похоже на ожидаемый результат. По сложившейся традиции все происходит на черном фоне. Аттрактора тут, лично, два — в различных фазах. Фиолетовый соответствует нулевому увольнению фаз косинуса, алый — полуобороту, углу Пи. Благодаря нашему табличному генератору делается все это просто.

Конечно, верный препод должен сделать примечание, что, мол, на координатные оси не нанесены штуки измерения, кроме того, не указаны параметры. Серьезный программист, посмотрев в код, может дополнить, что координатную сетку тоже можно сделать объектом и параметризировать. К тому же, поскольку вычисления тут превалируют над отрисовкой, то несложно будет рисовать сразу 128 фазовых разрядов в 128-ми окнах. Более того, можно эффективно анимировать разряды, циклически заменяя знаки MovieClip.

Да, все это так — но главное для нас не это. Куда интересней, что ActionScript может считать не хуже того же Бейсика — и при этом эффективно отображать результаты. что и требовалось доказать. Кстати, вы легко можете кликнуть по клипу и прилизать участок — без единой черты кода. А теперь реализуйте это сами, например на C++… Ну, а мы пока будем продвигаться дальше.

А где же тут интерактивность и распределенные вычисления? Простой отзыв: в Караганде. Более детально: Flash в современной выкройке включает все для интерактивности, реализованы главные элементы управления, а любых и нет — те можно добавить. Первое, что приходит в вершину: позволить пользователю вводить параметры нашего уравнения и нажимать кнопку Пересчитать. Но это противоречит иной идее — распределенным вычислениям. В конце концов, можно сделать хотя бы кнопку Выход, для нетерпеливых.

Идея распределенного вычисления как раз и состоит в централизованном (или распределенном) управлении вычислительным спором. Для реализации такого поведения проще всего создать на сервере XML-добавление, которое будет реализовать управление. Пользователю браузера при этом отводится роль лоха-зрителя.

В инциденте с нашим добавлением можно предположить, что в свойстве параметров будут выступать c, A и w. В свойстве результата программа может сбрасывать те же параметры, плюс вид полученного графика: необыкновенный — не необыкновенный (придется еще реализовать детектор странности). Серверная часть легко сможет заносить эти известные в базу известных — с будущим разбором. Кстати, программа разбора этой БД тоже может быть написана на Flash, почему бы и нет.

С точки зрения программирования ActiveScript тут нет никаких задач: в диалект встроена поддержка XML-известий. Также в просторном ходу и бывалая техника — LoadVariables. При этом вместо файла вы указываете имя CGI-скрипта, который и поставляет надобные пары "имя-значение". Короче, даже отбор есть.

Выглядит это даже проще, чем кажется: например, для загрузки параметров из duffarg.pl можно загрузить переменные. Для этого достаточно линию

c=1.0; A=1.1; w=2.1; revN=8;

заменить на:

_root.LoadVariables(duffarg.pl,"GET");

Если скрипт генерирует параметры в лике XML, загрузить их будет чуток сложнее:

duffXMLParams=new XML();
duffXMLParams.onLoad=function(success) {
if (success) {
… Разряд XML акта
}
}
duffXMLParams.load(duffarg.xml);


Для "отдачи" результатов легко можно использовать метод XML.send() — отсылка работает еще проще, без ожидания результата. Несложно организовать и отсылку переменных, указав в свойстве метода доступа "POST" либо же "PUT" — в свойстве второго параметра LoadVariables().

Диагноз: Ш 7-Б


А теперь, если посмотреть на вещи прагматично, глазами настоящих людей из ЦРУ, ГРУ и иных безграничных убежищ. Это мы для образчика взяли любые-то необыкновенные аттракторы — а ведь эти-то ребята могут поручить Flash-скриптам все что угодно, от расчета биологического оружия, декодирования шифров, дешифрации изваяний со товарищей до вычитки электронной почты и… да мало ли добрых дел можно придумать.

И если раньше для этого нужно было покупать небывалый мэйнфрейм за несколько миллионов, то теперь достаточно перетереть с yahoo.com и разместить там свой Flash-банерок. Видели там подобные Flash’ки? Это с лику там реклама кредитных карточек, а на настоящем действии — кто знает?

А ведь можно сделать "вычислитель" и вовсе малым и невидимым…

С иной руки, можно, как в SETI@HOME, наоборот — разрекламировать, раструбить, чтобы пользователь мог поставить вашу флэшку домашней страничкой и подобным ликом стал помогать вам бороться со СПИДом, искать пришельцев и раскодировать коды террористов. Это уже урок наглости, под каким поводом вы будете тырить у людей их процессорное время.


Кстати, ходит подобная полусказка, что, мол, Саддам Хусейн в отзыв на эмбарго на ввоз компов в Ирак скупал приставки Nintendo 64, ставил на них Linux, объединял в кластеры и решал хитрые задачки вида просчета траекторий ракет. Не уверен, что именно так оно и было — но идея, без недоумения, занимательная. В инциденте, тайные возможности есть, и рано или поздно они будут использованы.



Использованы иллюстрации с сайта astronomy.swin.edu.au.


Сочинитель: Арсений чеботарев
Ключ: www.comizdat.com




1 2 3 4 5 6 7 8 9 10
[ Вернуться в раздел | Вернуться на первую страницу ]
Комментарии принадлежат их сочинителям. Мы не несем ответственности за их содержание.
Flash ActionScript и необыкновенные аттракторы
© copyright 2008 action & Все про ActionScript в деталях и не только...
Реклама
Электронная тайна по изделию флеш-потех

Хотите научится создавать флеш-потехи? Нет ничего проще!

Флеш-исходники
Рассылки сайта
Content.mail.ru
Программирование в Macromedia Flash ActionScript от А до Я
Subscribe.Ru
Пользительные приемы в Macromedia Flash
ActionScript
Maillist.ru
Программирование в Macromedia Flash
ActionScript
Who's Online
2 пользователь(ей) активно (2 пользователь(ей) просматривают Библиотека статей)

Дольщиков: 0
Посетителей: 2

далее...
New Members
FENGshui 13/07/2008
zhorra 11/07/2008
Yakh 05/07/2008
maltcev 28/06/2008
VsevMart 25/06/2008
dokumentrf 23/06/2008
weberart 21/06/2008
ijojeg 19/06/2008
seomaz 19/06/2008
deos 18/06/2008

Copyright © 2004-2006
дизайн интерьера Классно! Мобильники! сотовый телефон samsung d500.