Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 1,2 > Программное рисование


Автор: Dandik 19.3.2006, 13:35
День добрый.
Возникла такая задача: Написать функцию (ну или метод класса) принимающую на входе : координаты опорных точек, длину и угол управляющего вектора (ну или координаты управляющее точки, как в curveTo) для каждого сегмента кривой, скорость имитации рисовании (длина шага в сегменте за кадр или кол-во кадров для прохождения сегмента) также для каждого сегмента, возвращающую на выходе плавное, постепенное рисование кривой.
Вообщем, проще говоря, мне нужно сымитировать постепенное визуальное рисование линии (не ломаной, а кривой), задав координаты опорных точек (точек перегиба), кривизну и скорость рисования сегмента (части кривой между опорными точками).
Подскажите, пожалуйста, как это можно сделать или где можно об этом почитать…

Автор: AlDev 20.3.2006, 05:32
Flash поддерживает программное рисование кривых Безье (см. MovieClip.curveTo метод)

Автор: Dandik 20.3.2006, 07:24
Цитата(AlDev @ 20.3.2006, 05:32)
Flash поддерживает программное рисование кривых Безье (см. MovieClip.curveTo метод)

Нда, действительно поддерживает нарисование, я бы сказал, то есть рассматривается конечный результат рисования. Мне же важен его процесс тобиш имитация процесса рисования в реальном времени (как карандашиком по бумаге ведут). Впрочем эта задача действительно решается с помощью алгоритма, использующего указанный тобой метода класса. Вопрос только в самом алгоритме, уж слишком сложный и длинный он у меня получается. может есть у кого-нибудь принятый для подобной задачи...
Задача сводится к делению кривой Базье на маленькие части и воспроизведение их последовательно по кадрам с помощью curveTo...

Автор: AlDev 20.3.2006, 13:12
Iv сделал нечто подобное, смотри:
http://dembicki.org/

Автор: Dandik 21.3.2006, 14:11
Цитата(AlDev @ 20.3.2006, 13:12)
Iv сделал нечто подобное, смотри:
http://dembicki.org/

Нда, посмотрел, интересно, но только у меня немного другая задача. Как я понимаю, управляющие точки определены ( controlX, controlY ) ну или в некотрых слкучаяях частично определены (по одной из координат). Мне же необходимо сделать универсальную функцию в этом плане (в конечном итоге сымитировать рисованине curveTo) для этого, как я понимаю нужно поделить будующую кривую на число сегментов (в зависимости от скорости) и просто воспроизвести построение этих сегментов по кадрам... Проблема состит в том, как найти координаты этих точек деления кривой (а потом и определить к каждой по управляющему вектору). Вообщем мне нужно хотябы узнать уравнение кривой Базье.
Может задача и надумана... тогда вопрос буудет состоять в тм, как мне лучше реализовать обрисовку в онлайне сложной фигуры (как например это сделлано здесь : http://www.acc-design.ru/ (образ девочки));

Автор: AzuManga 21.3.2006, 15:34
Можно сделать не программно, а по кадрам.

Ставишь в последний кадр уже нарисованную линиями фигуру, а потом в предыдущем кадре стираешь кусочек ластиком. В итоге в начальном кадре у тебя должен остаться пустой рисунок.

Автор: Dandik 21.3.2006, 21:30
Цитата(AzuManga @ 21.3.2006, 15:34 Найти цитируемый пост)
Можно сделать не программно, а по кадрам.

Хм, если бы меня это устраивала я бы не писал в форуме по программированию...

Цитата(AzuManga @ 21.3.2006, 15:34 Найти цитируемый пост)
Ставишь в последний кадр уже нарисованную линиями фигуру, а потом в предыдущем кадре стираешь кусочек ластиком. В итоге в начальном кадре у тебя должен остаться пустой рисунок.

Если фигура сложная, то это примерно клипов около 40 с линейкой в 50-100 кадров каждый, представляешь примерно сколько на это времени уйдёт.... сколько потом слёз по причине удаления всей работы (из-за невыносимо "тяжёлого веса", в данном случае разность в весе программного кода и непрограммного рисования может превышать 1000 раз...) К тому же чтобы исправить кривую придётся всё перечерчивать (а не за несколько секунд поменять координаты опорных точек)... и ещё много всего.... В данном случае об этом и речи быть не может....

Автор: Jlekc 23.3.2006, 12:15
хмм, любой справочник поднять формулы кривых не ткии уж и сложные.
базис любой кривой это набор прямых, чем больше тем плавнее кривая.
расчитать масив прямых, поставить указатель и по интервалу дорисовавать.
дык что именно нуна? формулы, как делать интервалы?

Автор: Dandik 23.3.2006, 22:26
Цитата(Jlekc @ 23.3.2006, 12:15 Найти цитируемый пост)
хмм, любой справочник поднять формулы кривых не ткии уж и сложные.

Формулы кривых второго порядка (построенные с помощью curveTo) действительно не сложные, если рассматривать их относительно стандартной ориенцации координат. т.е. относительно прямоугольной системы координат... В данном случае нет такой возможности т.к. очень проблематично будет не потерять связь между частями кривой, которая (связь), собственно, и состоит в принадлежности к кривой, построенной с помощью управляющего вектора Базье (тобиш чтобы воспроизвести кривую по частям нельзя отришаться от основного управляющего вектора кривой в каждой части, выражая часть кривой не через управляющий вектор, а через стандартную систему координат).


Цитата(Jlekc @ 23.3.2006, 12:15 Найти цитируемый пост)
базис любой кривой это набор прямых
Мне кажется, что это не имеет смысла в рамках flash, т.к. имеет место определение конечной точности - пикселя, которй в составе кривой по методу curveTo и является той прямой.

Цитата(Jlekc @ 23.3.2006, 12:15 Найти цитируемый пост)
чем больше тем плавнее кривая.
Сдаётся мне, что и окружности вы чертите с помощью отрезков и теоремы Пифагора smile И при обычном рисовании этот метод сгодился бы как-нибудь (100-150 отрезков окружности не давали бы такой гладкости, как 6 сегментов, построенных с помощью curveTо), но в теме. которая обсуждается конечный результат неважен, важен процесс... постройте, например окружность за 2 кадра... (тобишь используя ваши 2 отрезка, можно догадаться, что получится smile )



Цитата(Jlekc @ 23.3.2006, 12:15 Найти цитируемый пост)
дык что именно нуна? формулы, как делать интервалы?
Ну, минимум формулу кривой от угла и длины управляющего вектора Базье. smile Или рассказать мне, глупому, как можно за 200-300 кадров очертить сложный обьект многими кривыми и гладкими линиями с быстрой скоростью, и чтобы публикация весила не больше 7 кб.

Автор: Jlekc 24.3.2006, 12:17
лад, не будем вдаваться в демогогию о теории рисования.
твой объект(рисунок) мона описать програмно? Наскока знаю Корел или 3ДМакс помогут это зделать.

Имея на руках массив всех точек, придеться немного попариться с порядком вывода. Но думаю тож не приблема.
Написать метод и дергать его с определенным интервалом, для прорисовки нескольких позиций из твоего масива.

Цитата(Dandik @ 23.3.2006, 22:26 Найти цитируемый пост)
Ну, минимум формулу кривой от угла и длины управляющего вектора Базье.

эт стоит поискать на flasher.ru,
nuran всегда любил програмное рисование, найди его на форуме и поспрашивай, думаю не обидет

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)