Mam kod, który pobiera warunek C jako dane wejściowe i oblicza rozwiązanie mojego problemu jako "dozwolony obszar" A na przestrzeni (x, y). Obszar ten składa się z kilku "rur", które są zdefiniowane przez 2 linie, których nigdy nie można przekroczyć.Przecięcie obszaru w Pythonie
Rezultat, którego szukam, musi spełniać warunki k {C1, .., Ck}, a zatem jest przecięciem S między obszarami k {A1, ..., Ak}.
Oto przykład z 2 warunkami (A1: zielony, 3 rurki: A2: fioletowy, 1 tuba); rozwiązanie S jest w kolorze czerwonym.
Jak znajdę S kiedy mam do czynienia z 4 obszarów wokół 10 tubki? (Ostateczna fabuła jest okropna!)
Potrzebowałbym móc ją wykreślić i znaleźć średnią współrzędną i wariancję punktów w S (wariancja każdej współrzędnej). [Jeśli istnieje skuteczny sposób sprawdzenia, czy punkt P należy do S, czy nie, użyję tylko metody Monte Carlo].
Idealnie, chciałbym też móc wprowadzić "zakazane rury", które usunęłbym z S [to może być nieco bardziej skomplikowane niż przecięcie S z zewnętrzną częścią mojego zabronionego obszaru, ponieważ dwie rurki z ten sam obszar może się przeciąć (nawet jeśli linie definiujące rurę nigdy nie przecinają się)].
Uwaga:
Kod przechowuje również długość łuku linii.
Linie są przechowywane jako tablice punktów (około 1000 punktów na linię). Dwie linie definiujące rurę niekoniecznie mają tę samą liczbę punktów, ale Python może interpolować WSZYSTKIE z nich jako funkcję ich długości łuku w ciągu 1 sekundy.
Linie są funkcjami parametrycznymi (tzn. Nie można pisać y = f (x), ponieważ dozwolone są pionowe linie).
Działka została zmontowana farbą, aby uzyskać wynik po prawej ... Niezbyt wydajna!
Edit:
Nie wiem, w jaki sposób mogę korzystać plt.fill_between na stwardnienie skrzyżowaniu (można to zrobić tutaj 2 warunki, ale potrzebny jest kod zrobić to automatycznie, gdy jest zbyt wiele linii do oceny wzroku).
Na razie po prostu generuję linie. Nie napisałem nic, aby znaleźć ostateczne rozwiązanie, ponieważ absolutnie nie wiem, która struktura jest najbardziej do tego przystosowana. [Jednak poprzednia wersja kodu była w stanie znaleźć punkty przecięcia między liniami 2 różnych rur, a ja planowałem przekazać je jako wielokąty, aby uzyskać kształt, ale to implikowało kilka innych problemów ..]
Nie sądzę, żebym mógł to zrobić z
sets
: skanowanie całego obszaru (x, y) z wymaganą precyzją reprezentuje około 6e8 punktów ...[Linie mają tylko 1e3 punktów dzięki zmiennej wielkości kroku (dostosowuje się do krzywizny), ale cały problem jest dość duży]
do swojej ostatniej nuty - można dostać to zrobić za pomocą plt.fill_between (lub plt.fill) – Phlya
mógłbyś dodać trochę kodu na pytanie, który pokazuje gdzie w procesie wdrażania jesteście tacy, którzy są gotowi pomóc w uzyskaniu bardziej konkretnego pomysłu, w którym moglibyście utknąć, a co wiedzą najlepiej pasować? Byłoby świetnie. Dzięki. – Dilettant
Po prostu pomysł bez szukania zbyt blisko, jeśli możesz obliczyć każdą rurkę jako "zestaw" punktów, możesz zrobić przecięcie "set" między każdą parą rur, aby uzyskać coś użytecznego dla zamierzonego wyniku. –