Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Программное рисование кривой Безье высших степеней. (http://www.flasher.ru/forum/showthread.php?t=128274)

Gam6it 03.08.2009 23:45

Программное рисование кривой Безье высших степеней.
 
Привет народ. У меня такая задача: Есть на сцене несколько точек, допустим 10. Можно ли построить кубическую кривую безьее опираясь на эти точки? В доках по AS3, написано только как провести кривую 2ой степени (между двумя точками, отклоняя линию по 3ей).
Вообщем надо сделать что-то типо этого
http://ru.wikipedia.org/wiki/Файл:Bezier_forth_anim.gif

MonkDead 03.08.2009 23:58

Можно.

ramshteks 04.08.2009 00:00

но только опираясь уже не на API, а на математику и себя. Или пойти и стырить какую нить опенсорсину

MonkDead 04.08.2009 00:05

Цитата:

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

Герыч 04.08.2009 01:31

на той же википедии есть формула для кривой любого порядка:
Цитата:

Кривая Безье — параметрическая кривая, задаваемая выражением
http://upload.wikimedia.org/math/a/e...6bcbfd3c80.png
где http://upload.wikimedia.org/math/5/6...bd07f2ad59.png— функция компонент векторов опорных вершин, а http://upload.wikimedia.org/math/1/7...1b4625f1e6.png— базисные функции кривой Безье, называемые также полиномами Бернштейна.
http://upload.wikimedia.org/math/0/9...914097ebe5.png
http://upload.wikimedia.org/math/4/e...be0d8d931d.png где n — степень полинома, i — порядковый номер опорной вершины

Задаёшь сколько те надо опорных точек, и пробегаешься от 0 до 1 с выбранным шагом и строишь свою линию по отрезкам, а лучше даже кусками кривых второго порядка

silin 04.08.2009 09:04

http://bezier.ru/wp-content/uploads/...ier.swf?demo=5
http://silin.fatal.ru/#AS3/geom/fit

AL.exe 04.08.2009 11:57

Цитата:

ramshteks, звучит нехорошо, не стоит пропагандировать подобные действия.
Что плохого в использовании опенсорсных библиотек?

aksios 04.08.2009 12:10

AL.exe, то, что осознание их существования обламывает халяву впарить задорого всякую "некачественную работу".
Да и "стырить" в контексте опенсорца звучит нехорошо. Правильно будет: позаимствовать.

Герыч 04.08.2009 12:28

silin, в первой демке кривая - это склееные безье? или безье оч высокого порядка?

silin 04.08.2009 12:42

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

ramshteks 04.08.2009 13:22

позаимствовать тоже не правильное слово. Просто воспользоаться правом использования на условиях той лицензии по которой они распространяются ))

silin, я честно говоря уже не помню каких степеней рисовал безье, но рисовал без сurveTo. вот если интересно и мои пять копеек
лабораторная работа по компьютерной графике

silin 04.08.2009 14:06

>>не помню каких степеней рисовал безье, но рисовал без сurveTo
ну я это и имел ввиду, что 'родная' рисовалка (curveTo) заточена под безье второго порядка, а рисовать точками или отрезками это уже совсем другая производительность.

MonkDead 04.08.2009 14:30

Цитата:

Что плохого в использовании опенсорсных библиотек?
Ничего, я упор делал на слово "стырить".
Цитата:

Правильно будет: позаимствовать.
Как бы тоже не правильно :)

Хотя бы заменить на "воспользоваться" или "использовать"

AL.exe 04.08.2009 14:45

Цитата:

AL.exe, то, что осознание их существования обламывает халяву впарить задорого всякую "некачественную работу".
Нефиг делать некачественно.

Цитата:

Да и "стырить" в контексте опенсорца звучит нехорошо. Правильно будет: позаимствовать.
Воспользоваться.

Герыч 04.08.2009 15:07

Спионерить!=)

Gam6it 04.08.2009 17:13

В итоге получается что:

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

ramshteks 04.08.2009 19:46

а зачем другие языки? не думаю что на с++ есть встроенный класс реализующий безье...
На ас3 их более чем достаточно. и опенсорсных в том числе. Так что находите подходящую для вас библиотеку и используете. Ну или пишите сами. Там не так сложно. За то время пока существует этот топик, вы уже бы не только безье реализовали бы, а еще целый инструментарий для работы с ним.

Герыч 04.08.2009 21:06

Тем более все формулы я привёл на прошлой странице

formid 06.08.2009 18:54

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

loover 12.02.2013 00:40

а как сшить квадратичные кривые, чтобы между ними был плавный переход? к примеру, есть 5 точек, между ними строятся отрезки по уравнению (не curveTo) с массивом точек на выходе. первая кривая строится1-(2 опорная)-3, вторая 3-(4 опорная)-5. при таком подходе бывает заметен стык.

alatar 12.02.2013 02:04

Начиная с 11-й версии может рисовать кривые третьего порядка.

Nooob 12.02.2013 04:08

Цитата:

Сообщение от loover (Сообщение 1120319)
а как сшить квадратичные кривые, чтобы между ними был плавный переход? к примеру, есть 5 точек, между ними строятся отрезки по уравнению (не curveTo) с массивом точек на выходе. первая кривая строится1-(2 опорная)-3, вторая 3-(4 опорная)-5. при таком подходе бывает заметен стык.

логично предположить, нужно что-бы угол (2 опорная) - 3 - (4 опорная) был 180 градусов

loover 12.02.2013 16:41

Nooob, а как это реализовать?

Dip52 12.02.2013 16:59

Цитата:

Сообщение от Герыч (Сообщение 840343)
на той же википедии есть формула для кривой любого порядка:

Задаёшь сколько те надо опорных точек, и пробегаешься от 0 до 1 с выбранным шагом и строишь свою линию по отрезкам, а лучше даже кусками кривых второго порядка

А после того, как построил, можно ли как-нибудь добавить движение объекта по этим отрезкам?

Alex Lexcuk 12.02.2013 23:12

Цитата:

Сообщение от Dip52 (Сообщение 1120382)
А после того, как построил, можно ли как-нибудь добавить движение объекта по этим отрезкам?

Объект перемещается по отрезкам с определённым шагом от 0 до 1. Отрезки последовательно берутся из массива и при достижении 1 просто берется следующий отрезок.
Пример
http://swf-flash.blogspot.com/2012/0...animation.html

Nooob 13.02.2013 04:13

Вложений: 2
Цитата:

Сообщение от loover (Сообщение 1120376)
Nooob, а как это реализовать?

как вариант, преобразовать все точки так, чтобы на месте стыка была ещё одна кривая от середины предыдущей и последующей, так чтобы конечная точка стала опорной. или использовать кубические кривые
TestCurve.swf   (2.2 Кб)

Вложение 29106

loover 13.02.2013 06:04

Nooob, спасибо, отличный результат.


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

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