obliczeniowej Geometria problemów:
Punkt P0
dobiera się losowo na krawędzi (np EB
) wielokąta (np BCDE
), w celu znalezienia możliwych punktów (tj P1,P2,P3,...
) w innych krawędzie oparte na podanej odległości (tj. r
). Poniższa demonstracja pokazuje rozwiązanie poprzez znalezienie przecięć między okręgiem wyśrodkowanym na punkcie P0
a krawędziami wielokąta. Tak więc problem można w zasadzie rozwiązać przez analizę skrzyżowań Circle--Line-Segment
.Koło wielokątów przecięcia
Zastanawiam się, czy istnieje bardziej skuteczna metoda dla tego bardzo prostego problemu pod względem kosztów obliczeniowych? Proces zostanie poddany ocenie kilku million times
, więc każda poprawka jest interesująca.
- końcowe rozwiązanie skorzysta z Python mocy;
- obliczenie rdzenia będzie w Fortran w razie potrzeby.
Aktualizacje:
Dzięki za komentarze. Proszę wziąć pod uwagę moje komentarze do komentarzy, które pomogą wyjaśnić pytanie więcej. Nie chce ich tutaj powtarzać, zachęcając do rozważenia wszystkich komentarzy i odpowiedzi;).
Właśnie zaimplementowałem metodę Circle--Line-Segment Intersection
na podstawie algorytmu znalezionego [here]. Właściwie to dostosowałem go do pracy z liniowymi segmentami. Wzorcem algorytmu realizowanego w Pythonie jest następująca:
liczba odcinków jest: 100,000
a system jest zwykle na pulpicie. Upłynął czas: 15 seconds
. Mam nadzieję, że są one pomocne w wyjaśnieniu kosztów obliczeniowych. Wdrożenie rdzenia w Fortan może znacznie poprawić wydajność.
Tłumaczenie jest jednak ostatnim krokiem.
Czy odległość "r" wszystkich milionów zapytań jest taka sama? Czy możemy liczyć na wypukłość wielokąta? –
@BorisStrandjev Dla naszego problemu wszystkie wielokąty są wypukłe. 'r' może być różne dla każdej iteracji, więc może się zmieniać, ale jest stałe dla każdego wielokąta osobno. – Developer
Czy są miliony zapytań wykonanych w jednym wielokącie lub w innym? –