Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Синусоидальная кривая! Кто смогёт? (http://www.flasher.ru/forum/showthread.php?t=74981)

silin 03.02.2006 13:46

Вложений: 1
держи, но к Дембицкому все равно сходи..

veterok4 03.02.2006 22:16

Вложений: 1
ТЕМА не ЗАКРЫТА!
Внедрил патч Дембицкого... до конца правда, ещё не разобрался... однако уже наблюдаю не желательный эффет: к сожалению синусоида идёт по затухающей...см скрин ==>

Может какие поправки с приращением внести?

veterok4 04.02.2006 17:08

Ещё поправка!
 
Вложений: 1
Цитата:

Сообщение от veterok4
ТЕМА не ЗАКРЫТА!
к сожалению синусоида идёт по затухающей...см скрин ==>

И ещё один минус (см скрин) при задании толщины линии более 10 ps, наблюдается ещё один не желательный эффект: рваные края и проплеш в центре линии.

silin 04.02.2006 17:44

дада, ошибка накапливается, но ты не грусти.., поставь туда синус :)
Код:

ampl=10;
phase=10;
for(var i=0;i<path.path_length;i++){
        p=path.getPoint(i);
        plotter._y=ampl*Math.sin(Math.PI*i/phase);
        curve._rotation=p._rotation;
        curve._x=p._x;
        curve._y=p._y;
        var gp = {x:plotter._x, y:plotter._y};
        curve.localToGlobal(gp);
        lineTo(gp.x,gp.y);
};

ps про второй скрин не понял: зачем такую линию синусоидой рисовать, рисуй по линии и не будет рваных краев..

veterok4 04.02.2006 22:24

хммм....
 
Вложений: 1
Цитата:

Сообщение от silin
ps про второй скрин не понял: зачем такую линию синусоидой рисовать, рисуй по линии и не будет рваных краев...

Это я показал конечно утрированную линию... но и при 5 ps уже появляются рваные края - хотелось чистоты эксперимента...

А теперь новая трабла (сокращённый мой код со встроенным патчем Дембицкого):
Код:

        with (Math) {       
                _root.createEmptyMovieClip("myClip"+dd,dd); //создаю клипак
                _root["myClip"+dd]._x = 285;//перемещаю начало координат клипа...
                _root["myClip"+dd]._y = 275;//в центр рабочего стола
                _root.createEmptyMovieClip("curve", -1000+dd);
                var plotter=curve.createEmptyMovieClip("plotter", -1000+dd);

                //hexV = parseInt(colorIn,16);//указываю на 16-ную систему переменной...
                //eyeColor=new Color("myClip"+dd);//цвета, в ново-созданном объекте
                //eyeColor.setRGB(hexV);
                var radians = (ug.text*PI)/180;//перевожу  градусы в радианы
                var rad1 = sqrt(pow(x, 2)+pow(y, 2));//нахождение радиуса для...
                var rad2 = sqrt(pow(q, 2)+pow(w, 2));//каждой точки
                var rad3 = sqrt(pow(e, 2)+pow(r, 2));
               
                if (x<0&&y>0) {//определяю в какой четверти лежит точка и исходя из этого...
                        var ugol1 = PI/2+(PI/2-asin(abs(y)/rad1));//определяю угол
                } else if (x<0&&y<0) {
                        ugol1 = asin(abs(y)/rad1)+PI;
                } else if (x>0&&y<0) {
                        ugol1 = 3*PI/2+(PI/2-asin(abs(y)/rad1));
                }else{
                        ugol1 = asin(y/rad1);
                }
               
                if (q<0&&w>0) {
                        var ugol2 = PI/2+(PI/2-asin(abs(w)/rad2));
                } else if (q<0&&w<0) {
                        ugol2 = asin(abs(w)/rad2)+PI;
                } else if (q>0&&w<0) {
                        ugol2 = 3*PI/2+(PI/2-asin(abs(w)/rad2));
                } else{
                        ugol2 = asin(w/rad2);
                }               
               
                if (e<0&&r>0) {
                        var ugol3 = PI/2+(PI/2-asin(abs(r)/rad3));
                } else if (e<0&&r<0) {
                        ugol3 = asin(abs(r)/rad3)+PI;
                } else if (e>0&&r<0) {
                        ugol3 = 3*PI/2+(PI/2-asin(abs(r)/rad3));
                } else{
                        ugol3 = asin(r/rad3);
                }
                               
                var tt = 360/ug.text;//угол поворота
                for (i=0; i<tt; i++) {//цикл прорисовки
                        var u1 = ugol1+radians;//нахожу угол приращения для кождой точки
                        var u2 = ugol2+radians;
                        var u3 = ugol3+radians;
                        x2 = rad1*cos(u1);//переназначаю координаты точек
                        y2 = rad1*sin(u1);
                        q2 = rad2*cos(u2);
                        w2 = rad2*sin(u2);
                        e2 = rad3*cos(u3);
                        r2 = rad3*sin(u3);
                        var sSomeString : String = _root.czve.inValue;
                        var nSomeNumber : Number = Number( "0x" + sSomeString ); // Number ( ... ) - есть каст.
                        _root['myClip'+dd].lineStyle(tip.text, nSomeNumber, alfa.text);//задаю параметры линии
                        _root['myClip'+dd].moveTo(x2, y2);//ставим на первый анкер
                        _root['myClip'+dd].curveTo(q2, w2, e2, r2);//рисуем через контрольную до второго анкера

                        var path = new Path(x2+285, y2+275, q2+285, w2+275, e2+285, r2+275);//© Ivan Dembicki, http://www.dembicki.org
                        /////////синусода по кривой/////////////////////////
                        p=path.getPoint(0);
                        moveTo(p._x,p._y);
                        lineStyle(tip.text, nSomeNumber, alfa.text);
                        curve._rotation=p._rotation;
                        ampl=10;//амплитуда
                        phase=10;
                        for(var i=0;i<path.path_length;i++){
                                p=path.getPoint(i);
                                plotter._y=ampl*sin(PI*i/phase);
                                curve._rotation=p._rotation;
                                curve._x=p._x;
                                curve._y=p._y;
                                var gp = {x:plotter._x, y:plotter._y};
                                curve.localToGlobal(gp);
                                lineTo(gp.x,gp.y);
                                trace("myClip"+dd);//слежу за количеством итераций
                                dd=dd+1;//приращиваю переменную глубины мувика
};
                        ugol1 = u1;//меняем переменные углов (приращение)
                        ugol2 = u2;
                        ugol3 = u3;
                }
        schet = schet+1;//приращение счётчика истории создания клипов
        }

Дело в том, что флеш производит чуть более 21000 итераций и ...виснет! А всё потому что в цикле патча Дембицкого происходит НУ ОЧЕНЬ много поворотов мувика... Нельзя ли хоть как то сократить их? Или поискать альтернативный путь?

silin 04.02.2006 22:43

Цитата:

.. не забывайте о специфике материала, с которым работаете. многие беды флэшовых работ происходят от того, что люди делают в них вещи неспецифичными для флэша способами.
Цитата:

Вообще флэш не для таких вещей которые делаешь ты, для этого бы больше подошла Java
я, пожалуй, присоединюсь : искать 'альтернативный путь' в теперешнем флеше нет резона, не заточен он под такие вещи..
теоретичски это интерсно, но для практики(флешевой) -null
зы: в 9-ом плеере обещают производительность (арифметики по крайней мере) поднять в разы (а то и порядки), может тогда.., поглядим..

veterok4 04.02.2006 22:56

Ухожу "пробивать лбом стену"...:((

Usnul 06.02.2006 07:41

можно с диференциалом это все решить достаточно легко... находишь этот... как его по русски то? gradient короче, потом находишь синус, поворачиваешь точку на вычесленный угол и так далее пока не дойдешь до начала. Могу почиркать если кого интересует...

veterok4 06.02.2006 21:21

ОЙ!
 
Цитата:

Сообщение от Usnul
Могу почиркать если кого интересует...

ОЧЕНЬ, очень интересует! Ты просто не представляешь как будет тебе благодарно будущее поколение флешеров-дезигнеров-полиграфистов!

Nox Noctis 06.02.2006 21:25

Цитата:

Сообщение от Usnul
находишь этот... как его по русски то? gradient короче, потом находишь синус, поворачиваешь точку на вычесленный угол и так далее пока не дойдешь до начала

градиент по-русски так и называется. :)

очень любопытно, что ты имеешь в виду.

зы: если будешь делать, учти, тебе придется объяснить как это работает :)


Часовой пояс GMT +4, время: 21:05.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.