Форум 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 08.05.2006 22:02

Из ломанной в кривую
 
Вложений: 1
Интересно, можно сделать так, чтобы ломаная линия, после того как в некоторые ее точки ткнули мышкой, скруглялась?

Заставить пользователя нарисовать ломаную замкнутую линию еще можно, а вот скруглить углы...

Если есть хоть какие-то мысли или примеры - поделитесь пожалуйста... :)

silin 08.05.2006 22:12

глянь, (в самом низу)
не уверен, оно ли тебе надо (праздник ведь..

Dennix 08.05.2006 22:28

Спасибо, посмотрю... :)

Dennix 08.05.2006 23:07

Вложений: 2
Все-таки не совсем то.... надо как на картинке вверху... А у тебя так:

Dracula_DIS 08.05.2006 23:21

ипользуй обычную математическул интерполяцию...
это если сосьавлять потом ее из кусков кривых Безье.
или попробуй разобраться в самих кривых Безье...

Dennix 08.05.2006 23:25

Надо сделать из указываемой пользователем точки - контрольную точку в кривых Безье - а как это организовать?

silin 08.05.2006 23:27

вот так и сделать: "из указываемой пользователем точки - контрольную точку в кривых Безье"

Dracula_DIS 08.05.2006 23:29

curveTo(x,y,x2,y2);
синтаксис такой вроде..

Dennix 08.05.2006 23:39

:) А кодом не поможешь, плиз?
Я рисую lineto по событию onMouseUp, т.е. - клик - точка - клик - прямая между двумя точками... Допустим знаю как сделать точное позиционирование, чтобы точно щелкнуть по вершине, то как из угла сделать кусок окружности - хоть убей... :)

Dracula_DIS 08.05.2006 23:41

хм... напиши мне щас на ICQ 273373388 попробуем разобраться...

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, время: 17:20.

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