Aproksymacja krzywej beziera

0

Poszukuje algorytmu, który z narysowanych myszką pikseli zrobi krzywą beziera. Tak jak w edytorach graficznych do rysunku wektorowego.

0

PolyBezier + kilka zabiegów...

0

Ale nigdzie nie moge tego znaleźć. Jak np. z kilkudziesięciu punktów zrobić jedną krzywą 3go stopnia, bez węzłów pośrednich.

0

Jedna krzywa przez kilkadziesiąt punktów? [???]
Krzywa 3-go jest wyznaczona jednoznacznie przez dokładnie 4 punkty!

Sklejasz po 4+3+...+3 - punkt poprzedni i 3 następne...

Albo wygładzanie -> aproksymacja średniokwadratowa. :)

0

Może zadam pytanie inaczej.
Jak wygląda lub gdzie moge znaleźć algorytm do wyznaczania krzywej beziera 3-go stopnia, która przybliża ciąg punktów.

0
adf88 napisał(a)

Może zadam pytanie inaczej.
Jak wygląda lub gdzie moge znaleźć algorytm do wyznaczania krzywej beziera 3-go stopnia, która przybliża ciąg punktów.

Jeśli krzywa Beziera (ogólnie) interpoluje punkt początkowy i końcowy, aproksymując punkty pośrednie, to jak chcesz z kilkunastu punktów zrobić krzywą Beziera trzeciego stopnia (4-punktową)?? Natomiast z krzywych trzeciego stopnia można skleić krzywą (B-spline), która przebiega przez większą ilość punktów, oczywiście składającą się z kilku krzywych Beziera trzeciego stopnia...

http://pl.wikipedia.org/wiki/Krzywe_Beziera
http://pl.wikipedia.org/wiki/Krzywa_B-sklejana

0

to jak chcesz z kilkunastu punktów zrobić krzywą Beziera trzeciego stopnia
Właśnie to chce zrobić, chce znaleźć krzywą, nawet z większej ilości punktów.
Z rastrowej krzywej, zrobić krzywą wektorową. Takie trasowanie, tyle że mam dodatkową informacje o kolejności pikseli.

0

Zadałeś sobie chociaż trud poszukania w internecie?? Mi to zajęło 5 minut... np. ta strona: http://www.tinaja.com/cubic01.asp to kopalnia wiedzy o Bezierach. masz nawet artykuł "Fitting points to a bezier curve BEZDIST.PDF" [może niekoniecznie na rastrowych, ale... można przecież pomyśleć chwilę [glowa] i wybierać punkty z odpowiednią dokładnością, z drugiej strony czemu akurat krzywa Beziera?]

0

...z drugiej strony czemu akurat krzywa Beziera?

Potrafisz sprawnie narysować inną, np. krzywą w postaci wielomianu trygonometrycznego rzędu 9, albo funkcji niewymiernych, lub e^x, itp.?

Ręczne obliczanie i rysowanie kolejnych punktów nie jest zbytnio dobrym pomysłem.

A krzywe beziera są obsługiwane nawet sprzętowo. :d

0

Mi to zajęło 5 minut... np. ta strona: http://www.tinaja.com/cubic01.asp to kopalnia wiedzy o Bezierach
Niestety dokument ten jest mi nieprzydatny.

ale... można przecież pomyśleć chwilę i wybierać punkty z odpowiednią dokładnością
I wtym właśnie największa trudność. Może ktoś zna jakąś dobrą metode ?

Potrzebuje szybkiego algorytmu, nie koniecznie dokładnego. Krzywe mają być rysowane live.

Jak na razie wymyśliłem tyle. Krzywą określają cztery punkty (x0, y0),...,(x3, y3)
Dla dwóch wymiarów musimy znaleźć dwie funkcje:
x(t) = Axt3 + Bxt</sup>2 + Cxt + x0
y(t) = Ay
t3 + Byt2 + Cyt + y0

Reszte punktów moge policzyć ze wzorów
x1 = x0 + Cx/3
x2 = x1 + (Bx + Cx)/3
x3 = x0 + Ax + Bx + Cx
y1 = y0 + Cy/3
y2 = y1 + (By + Cy)/3
y3 = y0 + Ay + By + Cy

Dziedzina t zawiera sie w przedziale [0, 1]

Koniec i początek mamy dany ((x0, y0) i (x3, y3)), zatem wystarczy znaleźć dwie pochodne:
x'(t) = 3Axt^2 + 2Bxt + Cx
y'(t) = 3Ayt^2 + 2Byt + Cx
gdzie dodatkowo
Ax + Bx + Cx = x3 - x0
Ay + By + Cy = y3 - y0

Zatem zadanie sprowadza sie do znalezienia (nie koniecznie z najlepszą dokładnością) wielomianu drugiego stopnia przybliżającego przebieg n punktów.
n będzie zazwyczja nie większe niż 200, lecz może sie zdarzyć nawet ponad 1000

Punkty te wyznacze:
x - licząc odległość pomiędzy rysowanymi pikslami czyli prędkość myszki
y - licząc odległość pomiędzy pixlami w danym wymiarze (kolejne przyrosty czyli pochodną)

0

Jakoś tak rozpaczliwie do tego podchodzisz.

Wspomniałem już wcześniej o aproksymacji średniokwadratowej.
Jest to dobra i bardzo prosta metoda do takich zadań - minimalizacja sumy kwadratów odległości od n punktów do krzywej stopnia k < n+1 (dla k = n+1 jest zwykła interpolacja i wtedy to minimum = 0).
Jeszcze lepsze są wielomiany Czybyszewa... :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1