[Algorytmy] Algorym offsetu (przesunięcia) krzywej

oneiro
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 14 mar 2010, o 14:32
Płeć: Mężczyzna
Lokalizacja: Polska

[Algorytmy] Algorym offsetu (przesunięcia) krzywej

Post autor: oneiro »

Witam,

Tworzę prosty program, którego zadaniem jest wyrysowanie krzywych zapisanych w kodzie programu. Ale poległem na na (wydawałoby się) banalnej rzeczy - otóż nie wiem jak zrobić offset czyli przesunięcie krzywej.

Żeby było łatwiej nie będzie kosinusoida. Wyrysować ją umiem, ale potrzebuję nadać jej grubość, tj. zrobić odsunięcie od jej linii środkowej. Jeśli ktoś miał do czynienia z CAD'em to w AutoCadzie (oraz każdym innym cadzie) jest polecenie offset/odsuń.
Polecenie to działą tak, że odsuwa w podanej odległości krzywą od siebie, tworząć nowa. NIe wiem jak to opisać, CAD'owcy wiedzą w czym rzecz, a zdjęcia wszystko wyjaśnią - na końcu tematu.

Pytanie jak to zrealizować programowo? Funkcję matematyczną znam, chcą odsunąć krzywą o np. 10 jednostek w plus i minus (górę/bok, prawo/lewo). Tylko nie wiem jak się do tego zabrać - może jakieś sugestie?

PS. Od razu dodam, że dodanie/odjęcie do funkcji \(\displaystyle{ y=f(x)}\) stałej wartości nie jest rozwiązaniem.

- tak chcę mieć
- to NIE jest rozwiązanie
Ostatnio zmieniony 3 lis 2012, o 21:36 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.
abc666

[Algorytmy] Algorym offsetu (przesunięcia) krzywej

Post autor: abc666 »

Wyznacz styczną i wektor do niej prostopadły. Przesuń o ten wektor.
oneiro
Użytkownik
Użytkownik
Posty: 15
Rejestracja: 14 mar 2010, o 14:32
Płeć: Mężczyzna
Lokalizacja: Polska

[Algorytmy] Algorym offsetu (przesunięcia) krzywej

Post autor: oneiro »

Niby tak, tutaj piszą to samo:


ale jak to zrealizować programowo? Może inaczej - jak znaleźć wektor normalny (w punkcie?). Nawet jak znajdę normalny wektor to na łuku to przy dostatecznie dużym odsunięci będę miał po odsunięciu zbiór punktów (po "zewnętrznej" stronie), a nie ciągłą grafikę.

-- 4 lis 2012, o 16:50 --

Coś mi nie wychodzi, mam jakieś rezultaty, ale to nie to, może gdzieś się pomyliłem....funkcja jest postaci:
\(\displaystyle{ f(x)= \frac{ c_{a}*cos\left( \frac{2* \pi *x}{ b_{0} } \right) }{2}}\)

Styczna (prosta) do niej w punkcie \(\displaystyle{ P( x_{0};y_{0} )}\) jest postaci:

\(\displaystyle{ \frac{- \pi * c_{a}*sin\left( \frac{2* \pi * x_{0} }{ b_{0} } \right)}{ b_{0} } *\left( x- x_{0} \right) + \frac{ c_{a}*cos\left( \frac{2* \pi * x_{0} }{ b_{0} } \right) }{2}}\)

Normalna do prostej jest postaci:
\(\displaystyle{ \vec{n}=\nabla F(x,y)=\left[ \frac{\partial F}{\partial x};\frac{\partial F}{\partial y}\right]}\)

co po podstawieniu daje mi:
\(\displaystyle{ \left[ \frac{ \pi * c_{a}*sin\left( \frac{2* \pi * x_{0} }{ b_{0} } \right) }{ b_{0} };1\right]}\)

Wektor mnożę przez odległość, o jaką chce odsunąć krzywą.

Innymi słowy o tyle przesuwam każdy X i Y mojego wykresu, ale coś nie wychodzi - sprawdzicie, czy dobrze policzyłem...-- 4 lis 2012, o 21:54 --PS. Dalej walczę, jakby kogoś zainteresował temat to tutaj jest coś ciekawego
ODPOWIEDZ