| Автор |
Съобщение |
|
uglyduck
Ранг: Новодошъл
Регистриран на: Чет Окт 20, 2005 5:02 pm Мнения: 108
|
 алгоритъм за крива на Безие
Здравейте!
Някой може ли да предложи връзка към информация за смятане на крива на Безие?
Интересува ме от хардуерна гледна точка - в Google информация дал Бог, но от към математика и тук-таме някой сорс на С, в който floating point аритметиката и деленето не са проблем. А мен ме вълнува как би могло да стане с програмируема логика - без значение каква. Не търся готово решение, а по-скоро принцип, алгоритъм. Кривата на Безие ме интересува, когато Безие-то е дадено с 4 точки - да кажем, както е дадено на тази картинка:  .
Благодаря за всяко инфо
|
| Пет Сеп 11, 2009 2:18 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
че по какво трябва да се различава алгоритъма за програмируема логика от алгоритъма за РС?
|
| Пет Сеп 11, 2009 3:55 pm |
|
 |
|
ДедоБоре
Ранг: Форумен бог
Регистриран на: Нед Ное 21, 2004 11:31 pm Мнения: 10088
|
най-доброто описание, което съм виждал е на кнут:
Don E. Knuth. Metafont: the Program, стр. 123-131
имам я на хартия, ще трябва да си я потърсиш в нета.
в The METAFONTbook трета глава Curves е много нагледно описан процеса на итерациите
|
| Пет Сеп 11, 2009 5:17 pm |
|
 |
|
uglyduck
Ранг: Новодошъл
Регистриран на: Чет Окт 20, 2005 5:02 pm Мнения: 108
|
Всъщност, едва ли се различава много...
От една страна - С vs. HDL&
Най-същественото е, че не можеш да пишеш на С за FPGA да кажем - просто цялата идеология е различна. Вярно, че се правят опити за FPGA С компилатори, но това не е много сериозно. Писането за процесор и за логика е коренно различно - ако си опитвал, ще ме разбереш. Следователно и алгоритъмът ще се различава малко. Споменах вече, че floating point на С не се превежда така лесно в логиката - просто такова животно няма и трябва сам да си го напишеш (или да ползваш FPU ядро да речем).
От друга страна:
Липсва ми достатъчно информация изобщо за алгоритъма за смятане на Безие - желателно максимално опростен.
Ако ти е лесно да обърнеш полиномиалното представяне, да кажем от тук: Bezier curve from Wikipedia в HDL описание - можеш да подскажеш малко. Според мен не е толкова лесно.
Благодаря
|
| Пет Сеп 11, 2009 5:23 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Мммм защо да е проблем, какво ти пречи да си вкараш FPU ядро което да се занимава само с floating point-а? Не съм заглеждал алгоритъма в детайло, може да е удобен за чисто логическо обработване без интерпретиране на операции с плаваща запетая, но не малко приложения просто вкарват FPU в логиката.
|
| Пет Сеп 11, 2009 5:36 pm |
|
 |
|
Dimitar
Ранг: Форумен бог
Регистриран на: Пет Ное 12, 2004 3:38 pm Мнения: 9103 Местоположение: Chicago, IL
|
Айде някой да черпи по една бира
или ето тук:
http://www.woodpecker.org.cn:9081/doc/2 ... mfbook.pdf
В самата директория http://www.woodpecker.org.cn:9081/doc/2 ... /MetaPost/ има и други интересни книжки по темата. В началото на metafun-s.pdf има доста за въпросните криви.
|
| Пет Сеп 11, 2009 6:38 pm |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Разликата между алгоритмични езици и езици за описание на хардуер (HDL) е огромна... zaphod най-вероятно се шегува
Конкретно по темата: Първата стъпка при PLD е да дефинираш "черната кутия". На входа на тая кутия трябва да подадеш четирите точки. Може да имаш шина през която да ги записваш във вътрешни регистри, или за всяка точка да имаш по два порта съответстващи на X & Y координати.
На изхода обаче "крива" няма как да изкараш. Обикновено подходите са два:
1) Подаваш X,Y координати а на изхода излиза цвят на пиксел според това дали през съответната точка минава крива или не. Тоя подход е удачен ако ще показваш резултатите на дисплей.
2) Подаваш t (число между 0 и 1) и получаваш точка. Може и само клок да подаваш и през някаква стъпка да изплюваш координати на точки от кривата.
Първия случай доста ще те изпоти предполагам, затова по-добре се ориентирай към втория или подобен нему. Но въпросът е че и при двата като разпишеш какво ти е дадено (входни портове) може да помислиш как да изкараш каквото трябва на изходните портове. В случая формулите на Безие не са чак толкова сложни.
Просто приемаш че Px са ти вектори в двумерно пространство, разписваш формулата... и си готов 
|
| Пет Сеп 11, 2009 6:50 pm |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
не се шегувам миро, алгоритъма за крива на безие е един, а човека явно пита за имплементация, а не за алгоритъм. имплементацията е езиково зависима, а не алгоритъма.
|
| Съб Сеп 12, 2009 9:28 am |
|
 |
|
miro_atc
Ранг: Форумен бог
Регистриран на: Нед Фев 26, 2006 6:52 pm Мнения: 11266 Местоположение: Добрич
|
Алгоритъмът е поредица от ясни инструкции как от точка А да стигнеш до точка Б
Кривата на безие се описва с формула, която дава зависимостта на точка Б от точка А, но не описва пътя между тях. И както при всички формули може да се използват множество алгоритми за тяхното пресмятане.
При РС обикновено се използват алгоритми, защото алгоритмичните езици са много по-масови.
При PLD е обратно - алгоритмичните езици са пълна екзотика, работи се с модели, описания и схеми...
|
| Съб Сеп 12, 2009 11:18 am |
|
 |
|
zaphod
Ранг: Форумен бог
Регистриран на: Нед Юли 24, 2005 10:28 am Мнения: 2658
|
абе ако оставим настрана езиковите спорове кое е алгоритъм, кое формула и кое не знам си кво, базовия алгоритъм за крива на безие е следния:
имаме началните N точки, свързваме ги с отсечки и получаваме N-1 отсечки. пускаме по всяка отсечка да се движи точка от началото до края и. повтаряме процедурата за тези движещи се N-1 точки и така до достигане на една единствена точка. тази точка ни е "писалката" която чертае кривата на безие.
от тази рекурсивна дефиниция е изведена и горната формула, за частен случай от 4 точки. самия алгоритъм е пределно прост и ясен и човек може да го имплементира на всеки "език" който владее, аз лично мога да го направя и на аналогова схема с операционни усилватели. точно затова предположих че питащия търси не алгоритъм, а частично или напълно готова имплементация, която вече е специфична според "езика" на който се прави.
|
| Нед Сеп 13, 2009 10:25 am |
|
 |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 25, 2004 12:32 pm Мнения: 8382 Местоположение: София
|
Ето го истинският изрод. 
|
| Пон Сеп 14, 2009 12:14 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
То много неща на операционни усилватели стават по лесно от колкото да пишеш код 
|
| Пон Сеп 14, 2009 2:15 pm |
|
 |
|
ji4ka
Ранг: Форумен бог
Регистриран на: Чет Фев 01, 2007 4:04 am Мнения: 1539
|
Той и затова се казва "Операционен" усилвателя - защото е мислен да прави математически Операции със сигналите.
|
| Пон Сеп 14, 2009 9:47 pm |
|
|