Кривые Безье в As3

#flash #actionscript-3 #bezier

#flash #actionscript-3 #безье

Вопрос:

Прав ли я, полагая, что из графического интерфейса Flash вы можете рисовать только кубические кривые Безье, а из Actionscript вы можете рисовать только квадратные кривые Безье? Неужели?

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

Комментарии:

1. в дополнение к полученному вами ответу, если вас интересует больше математики Безье в actionscript, хотя она и устарела, эта статья довольно хороша: timotheegroleau.com/Flash/articles/cubic_bezier_in_flash.htm

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

3. То, как вы реализуете кривые, зависит от вас и ваших требований. Вы могли бы рисовать квадратичные, кубические (используя удобные ресурсы @divillysausages) или другие кривые (эрмита, кардинал и т.д.) algorithmist.wordpress.com/tag/hermite-curve … Возможно, стоит также взглянуть на Degrafa degrafa.org

4. @George Реализация квадратичной функции поверх кубической в Actionscript кажется нетривиальной (по крайней мере, с какой-либо степенью точности). Альтернативный вариант, реализация растеризатора в AS, кажется неоптимальным.

5. С помощью curveTo в actionscript вы можете рисовать квадратные кривые, а с помощью кода из farmcode или Paul Tondeur, приведенного ниже, вы можете рисовать кубические кривые. Какова ваша конечная цель? Например, при получении координат из чертежа, созданного дизайнером, вы могли бы создать инструмент рисования или написать скрипт инструмента, используемого дизайнером, для получения выходных данных в удобном вам формате.

Ответ №1:

Если вы используете API рисования, то вы можете рисовать только квадратные кривые Безье, используя функцию curveTo(). http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Graphics.html#curveTo ()

Для получения правильных кривых Безье это не так сложно, но вам придется сделать это самостоятельно. Несколько быстрых ссылок на исходный код, который я нашел:http://www.paultondeur.com/2008/03/09/drawing-a-cubic-bezier-curve-using-actionscript-3 /

http://www.farmcode.org/post/2009/07/06/Fast-2D-Bezier-Library-for-ActionScript-3.aspx

Комментарии:

1. Спасибо, дело не в том, что это плохой ответ, я просто не могу поверить, что это ответ.

2. @fakeAccount22 Это и есть ответ 🙂

3. После стольких попыток не делать этого, я вижу, что мне удалось перепутать квадратичные и кубические. Я отредактировал вопрос. Извините, что из-за этого ваш ответ выглядит не таким полезным. Я ценю, что вы нашли время ответить

Ответ №2:

На самом деле из Flash Player 11, выпущенного вчера, API рисования поддерживает кубические кривые Безье:

(среди других улучшений и дополнений в этом крупном выпуске …)

http://www.adobe.com/devnet/flashplayer/articles/whats-new-flash-player11.html

Ответ №3:

Это отличный пост для рисования кубических кривых Безье в ActionScript с использованием fl.motion.Класс BezierSegment:

http://www.eleqtriq.com/2010/04/cubic-bezier-in-flash/

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

 var resolution  :uint       = 50;
var step        :Number     = 1/resolution;

function drawCurve(p0:Point, c0:Point, c1:Point, p1:Point)
{
    var bezier  :BezierSegment  = new BezierSegment(p0, c0, c1, p1);
    var t       :Number         = 0;
    while (t <= 1)
    {
        var pt:Point = bezier.getValue(t);
        with (graphics)
        {
            lineStyle(0.1, 0x00FFFF);
            t == 0
                ? moveTo(pt.x, pt.y)
                : lineTo(pt.x, pt.y);
        }
        t =step;
    }   
    pt = bezier.getValue(1);
    graphics.lineTo(pt.x, pt.y);    
}
  

Это действительно отличный пост!