Podzielenie krzywej na łuki

0

Mam oto taki problem. Mam funkcję na przykład sinus (może być równie dobrze zupełnie inna), którą rysuję punkt po punkcie na płaszczyźnie z przedziału -1/2pi do 1//pi. Chcę rozbić tą krzywą (jak i każdą inną dowolną) na jak najmniejszą ilość łuków tak, aby z pewną dokładnością (czyli nie musi idealnie pokrywać) odwzorować ten rysunek.

Na początku myślałem, żeby wziąć pierwszy A punkt z rysunku oraz punkt B oddalony o np 0.5 oraz długość promienia R. Następnie dobierać tak długo kolejny punkt, aż:

  1. punkt znajdujący się na środku w połowie C będzie znajdować się na okręgu w punktach A oraz B o promieniu R
  2. dojść do jakiejś maksymalnej odległości między punktami AB i wtedy zwiększać promień R aż do momentu, w którym punkt C znajdzie się na tym okręgu.

Nie wiem czy dobrze to wytłumaczyłem

0

A co jeśli krzywa będzie na tyle płaska że promienie wyjdą kolosalne? Nie mówiąc już nawet o tym co się stanie jak fragment tej krzywej będzie prostym odcinkiem ;]
Czemu chcesz to aproksymować akurat łukami okręgu? To dość nietypowy pomysł. Są znacznie wygodniejsze krzywe aproksymujące

0
Shalom napisał(a):

A co jeśli krzywa będzie na tyle płaska że promienie wyjdą kolosalne? Nie mówiąc już nawet o tym co się stanie jak fragment tej krzywej będzie prostym odcinkiem ;]
Wtedy dopasowany będzie łuk o bardzo dużym promieniu ;)

A czy łuki muszą się stykać "gładko"? Czy koniec jednego łuku musi być równoległy do początku następnego łuku?

0
adf88 napisał(a):

A czy łuki muszą się stykać "gładko"? Czy koniec jednego łuku musi być równoległy do początku następnego łuku?

nie, ale dobrze jakby ten margines błędy można było jakoś regulować.

Shalom napisał(a):

A co jeśli krzywa będzie na tyle płaska że promienie wyjdą kolosalne? Nie mówiąc już nawet o tym co się stanie jak fragment tej krzywej będzie prostym odcinkiem ;]

Tak naprawdę mam do dyspozycji prostą oraz łuki. Znalazłem taki algorytm: http://en.wikipedia.org/wiki/Ramer%E2%80%93Douglas%E2%80%93Peucker_algorithm
Tak mogę zmniejszyć ilość prostych.
I żeby wykryć czy punkty leża na jakimś łuku, to a b, c, d - to kąt stworzony przez abc musi byc taki sam jak bcd. Oczywiście też z jakimś marginesem błędu.

Dobrze kombinuję?

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