![]() |
Замкнутая линия по произвольным точкам
Громадный привет всем !
Я тут несколько (а точнее капитально :) отстал от жизни и на третий день сидения в MX спинной мозг начал подсказывать что наверняка не мне первому понадобилось нарисовать фигуру с минимально изрезанными краями по произвольно расположенным точкам ? :) Получасовой поиск на форумах ничего толком не дал, но все равно не верится что до сих пор нигде нету стандартной функции для подобных задач... В общем если кто-нибудь видел где-то, ткните старого лентяя носом в урл :) Или начинать бороться с ленью садиться писать самому ? :) |
Вложений: 1
И тебе не менее громадный.
Фигуру, или контур? Согласись, - разные вещи. Что значит "с минимально изрезанными краями"? Возьмем четыре точки, являющиеся вершинами квадрата. По этим точкам можно провести окружность, квадрат, треугольник и еще массу контуров разнообразнейших фигур. Если ты имеешь в виду, что эти точки должны быть вершинами многоугольника, то - конечно - можно. В приложенном исходнике – определены четыре точки (для простоты). На известном баннере мастера У.Б. "Стань известным, добавь свой исходник", определено множество точек, образующих надпись. Там не фигура, - там посложнее. Но, как видишь, можно. Правильно ли я тебя понял? |
привет!
вот если у тебя точки на плоскости и есть их порядок, то тогда простой алгоритм создаеш курву от первой точки до второй якорь ставишь меж них по центру при содздании последующих точек якоря ставишь в точку симметрно предидущему якорю относительно начальной точки кривой. вот код, только концевые точки уж сам соедини (чтобы заработало - код в первый фрейм, в библиотеке пустой мувик с линкаджем spline ) function Spline(){ this.n=5 this.init(this.n); } Spline.prototype = new MovieClip(); Spline.prototype.init= function(n){ var i=0; while (i<n){ if(i==0){ var j=0; } else { j=1; } while (j<3){ this.createEmptyMovieClip (i+""+j, i*100 + j); this[i+""+j].onPress =function(){ startDrag(this,true); this.onEnterFrame = function(){ this._parent.redraw(); } } this[i+""+j].onRelease =function(){ stopDrag(); delete this.onEnterFrame; } if(j==1){ //this[i+""+j]._visible=false; } with (this[i+""+j]){ if (j==1){ beginFill (0xCC0000, 100); } else { beginFill (0xFFFFFF, 100); } lineStyle (0, 0x000000, 50); moveTo (-5, -5); lineTo (5, -5); lineTo (5, 5); lineTo (-5, 5); lineTo (-5, -5); endFill(); _x =50+i*100 + j* 50; _y=200; init_x =_x; init_y = _y; } this[i+""+j].init_x =this[i+""+j]._x; this[i+""+j].init_y =this[i+""+j]._y; //this[i+""+j].createTextField("lbl",11,10,-5,300,20); //this[i+""+j].lbl.text = i+""+j; j++; } with ( this){ lineStyle( 0, 0x0000FF, 100 ); if(i==0){ moveTo( this[i+""+0]._x, this[i+""+0]._y ); } else { moveTo( this[(i-1)+""+2]._x, this[(i-1)+""+2]._y ); } curveTo( this[i+""+1]._x, this[i+""+1]._y, this[i+""+2]._x, this[i+""+2]._y ); //trace(spline[i+""+1]._x+":"+ spline[i+""+1]._x); } i++; } } Spline.prototype.redraw= function(){ this.clear(); //this[0+""+1]._x= this[0+""+0]._x +(this[0+""+2]._x - this[0+""+0]._x)/2; //this[0+""+1]._y= this[0+""+0]._y +(this[0+""+2]._y - this[0+""+0]._y)/2; var i=1; while (i<this.n){ this[i+""+1]._x= this[(i-1)+""+2]._x +(this[(i-1)+""+2]._x - this[(i-1)+""+1]._x); this[i+""+1]._y= this[(i-1)+""+2]._y +(this[(i-1)+""+2]._y - this[(i-1)+""+1]._y); i++; } /////////////// var i=0; while (i<this.n){ with ( this){ lineStyle( 0, 0x0000FF, 100 ); if(i==0){ moveTo( this[i+""+0]._x, this[i+""+0]._y ); } else { moveTo( this[(i-1)+""+2]._x, this[(i-1)+""+2]._y ); } curveTo( this[i+""+1]._x, this[i+""+1]._y, this[i+""+2]._x, this[i+""+2]._y ); } i++; } } Object.registerClass("spline" /*symbolID*/, Spline /*theClass*/ ); _root.attachMovie("spline","spl", 0); |
Hi !
Спасибо всем громадное :) теперь у меня хотя бы появилась пища для размышлений :) |
| Часовой пояс GMT +4, время: 11:20. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.