szukanie zaawansowane
 [ Posty: 7 ] 
Autor Wiadomość
Mężczyzna Offline
PostNapisane: 6 sty 2016, o 18:56 
Użytkownik

Posty: 4
Lokalizacja: Kalisz
W związku pewnym makrem pisanym dla Corela trafiłem na ciekawy problem. Otóż mam dwa łuki (krzywe Béziera w układzie 2D czyli na płaszczyźnie) które stykają się w jakimś punkcie S.
Obrazek
W te łuki wpisuję okrąg i potrzebuję znaleźć długości odcinków przyległych do okręgu (na rysunku wartość 5,18). Pomijam krzywe Béziera które tworzą pętle innymi słowy to są zwykłe łuki.

Okręgiem w moim przypadku jest frez który wycina literę. Czy jest jakiś gotowy wzór którego można by użyć? Ostatecznie wystarczyło by znaleźć współrzędne punktów przecięcia okręgu (frezu) z każdym z łuków.

Każdy z łuków mam w pełni opisany czyli znam wszystkie współrzędne potrzebne do narysowania kształtu używając krzywej Béziera (wielomian 3 stopnia). Prosił bym o jakąkolwiek pomoc.

Zadanie oczywiście muszę przerobić do postaci numerycznej (czy raczej do postaci kodu źródłowego), ale to akurat nie problem. Wystarczył by mi wzór analityczny by sobie z tym poradzić.

Obrazek
Powyższy rysunek powinien być bardziej zrozumiały. Chodzi mi o wyprowadzenie wzoru na odcinek DS i ES lub chociaż jakiś punkt zaczepienia bym wiedział jak się za to zabrać. Wzory na wielomiany i na okrąg są znane pytanie tylko jak je powiązać by uzyskać oczekiwany wynik. Ze względu na małe odległości uproszczenie krzywych DS i ES do postaci odcinków też mogło by na początek wystarczyć. Zawsze to jakiś punkt wyjścia. Zresztą błąd długości między odcinkiem a łukiem jest możliwy do pominięcia z uwagi na stosowanie małych frezów.
Góra
Mężczyzna Offline
PostNapisane: 6 sty 2016, o 22:10 
Moderator

Posty: 4300
Lokalizacja: Kraków PL
A czy długość luku zadanego krzywymi Béziera potrafisz wyznaczyć?
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2016, o 00:00 
Użytkownik

Posty: 4
Lokalizacja: Kalisz
Długości łuków AS i BS znam. Mam w bazie danych zrzut rysunku z Corela. Mam pełne długości wszystkich krzywych oraz parametry do złożenia krzywej Beziera. To jest o tyle fajne, że dowolny kształt w Corelu można opisać skończoną ilością krzywych lub do takiej postaci sprowadzić. Aktualnie mam narzędzie które umożliwia odtworzenie kształtu składowanego w bazie do postaci oryginalnej.

W Corelu mogę wyznaczyć nawet odległość tnąc odpowiednio odcinek. Niestety z uwagi na sposób składowania i przetwarzania danych na tym etapie mi to nic nie daje. Nie bardzo wiem jak obliczyć odcinek krzywej. To znaczy gdybym znał np. współrzędne punktu D to czy był bym w stanie obliczyć długość DS. Muszę poszperać we wzorach to pewnie coś znajdę. Najważniejszy problem to jak znaleźć współrzędne punktów D i E.

Średnica frezu (okręgu) też jest znana. Znam jeszcze kąt pomiędzy stycznymi łuków zaczepione w punkcie S tyle, że to pewnie nic nie daje. Krzywa Beziera na płaszczyźnie opisana jest jako zestaw 4 punktów np. A i S oraz dwóch końców stycznych wychodzących odpowiednio z punktu A i S. Znany jest również kąt pod jakim taki "rozpinacz" (styczna) leży w stosunku do osi X.
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2016, o 00:05 
Moderator

Posty: 4300
Lokalizacja: Kraków PL
Nie o to mi chodziło.
Czy masz algorytm wyznaczania długości łuku pomiędzy zadanymi punktami dla dowolnej krzywej Béziera?
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2016, o 00:14 
Użytkownik

Posty: 4
Lokalizacja: Kalisz
Znalazłem taki wzór:
d = \sqrt{(x_1 - x_0)^2 + (y_1 - y_0)^2}
źródło: http://math.stackexchange.com/questions/12186/arc-length-of-b%C3%A9zier-curves

Jak to dobrze, że dla 2D wszystko jest łatwiejsze.
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2016, o 01:30 
Moderator

Posty: 4300
Lokalizacja: Kraków PL
Podałeś wzór na długość odcinka pomiędzy punktami (x_0;y_0) i (x_1;y_1), a nie na długość łuku.

Obrazek

Trzeba wyznaczyć punkt A, następnie B, w końcu C i obliczyć długość łuku AC.
Krzywa przerywana, to obrys w kierunku freza i dystansie r (promień freza).
Góra
Mężczyzna Offline
PostNapisane: 7 sty 2016, o 20:40 
Użytkownik

Posty: 4
Lokalizacja: Kalisz
SlotaWoj napisał(a):
Czy masz algorytm wyznaczania długości łuku pomiędzy zadanymi punktami dla dowolnej krzywej Béziera?


Ups. Ale walnąłem gafę... Masz na myśli algorytm De Casteljau? Nie bardzo go rozumiem :(
Znalazłem algorytm umożliwiający cięcie krzywej beziera jeśli znamy procentową wartość długości odcinka. Taką samą operację mogę zrobić używając narzędzi Corela. Może w drugą stronę wystarczyło by poprzekształcać wzór.

Odnośnie obrysu to nie mam pojęcia jak go zrealizować numerycznie, ale jeszcze poszukam.
Góra
Utwórz nowy temat Odpowiedz w temacie  [ Posty: 7 ] 


 Zobacz podobne tematy
 Tytuł tematu   Autor   Odpowiedzi 
 Jak znaleźć równanie dwusiecznej?  matfka  6
 Na odcinku AB znaleźć taki pkt C aby zaszła proporcja  winfast29  1
 znaleźc izometrie  prawyakapit  0
 Długości przekątnych  lukis  1
 Wierzchołki trójkąta i długości odcinka  Premo7  1
 
Atom [Regulamin Forum] [Instrukcja LaTeX-a] [Poradnik] [F.A.Q.] [Reklama] [Kontakt]
Copyright (C) Karpatka.pl