Форум 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=79462)

Dennix 09.05.2006 12:19

Народ, помогите! Сэр Dracula_DIS подсказал словесный алгоритм, спасибо ему за это большое.
Но реализовать все равно не могу - рисую программно квадратик (допустим) и заливаю его (lineTo, beginFill). Дальше после того как он закрасился, надо нажать кнопку и указать на точки какие надо скруглить. Скруглять надо только прямые углы и только на определенный радиус.

Достаточно переделать указанную точку в контрольную в кривых Безье методом curveTo. В какую сторону скруглять надо определять может HitTest`ом?? Типа определдить куда идут отрезки, создающие угол.

Но как дальше преобразовать вершину в контрольную точку и перерисовать этот угол или всю фигуру??? Не понимаю... Она ведь уже нарисована. Помогите, чем можете... :(

bbexp 10.05.2006 00:04

Dennix, onMouseUp помимо рисования, заноси в некий массив userArray координаты точки.
массив[0].x - это координата для moveTo
массив[0].y - это координата y
Код:

var userArray:Array = [];
var n:Number = 0;//это счетчик для массива;
var drawListener:Object = new Object();
drawListener.onMouseUp = function ():Void {
    userArray[n] = {x: _xmouse, y: _ymouse};
    n++;
}
Mouse.addListener(drawListener);


потом создаём новый массив curveArray, где сохраняем еще и промежуточные точки - середины, по принципу
Код:


var curveArray:Array = [];
for (var i=0; i<userArray.length*2;i+=2) {
    curveArray[i] = {x: userArray[i].x, y:userArray[i].y};
    curveArray[i+1] = {x: (userArray[i+1].x-curveArray[i].x)/2, y:(userArray[i+1].y - curveArray[i])/2};
}

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


Код не проверял, но думаю тут принцип понятен.

Dracula_DIS 10.05.2006 02:18

зачем сохранять еще середины если их по идее можно высчитать в любой момент??

bbexp 10.05.2006 13:27

в общем то да )))

Так нагляднее.
Никто не мешает потом удалить служебный массив.


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

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