{"id":23076446,"url":"https://github.com/lkwinta/kirkpatrick-algorithm","last_synced_at":"2026-04-30T15:33:00.543Z","repository":{"id":213599520,"uuid":"734478248","full_name":"lkwinta/Kirkpatrick-Algorithm","owner":"lkwinta","description":"Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space","archived":false,"fork":false,"pushed_at":"2024-01-04T16:22:33.000Z","size":19227,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-03T12:16:07.297Z","etag":null,"topics":["geometric-algorithms","kirkpatrick-algorithm","point-location","python","triangulation"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lkwinta.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-12-21T19:34:48.000Z","updated_at":"2024-11-27T16:22:16.000Z","dependencies_parsed_at":"2023-12-21T21:30:12.477Z","dependency_job_id":"f2d9ffda-c304-420e-b5f8-f65054a1a159","html_url":"https://github.com/lkwinta/Kirkpatrick-Algorithm","commit_stats":null,"previous_names":["lkwinta/kirkpatrick-algorithm"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/lkwinta/Kirkpatrick-Algorithm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lkwinta%2FKirkpatrick-Algorithm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lkwinta%2FKirkpatrick-Algorithm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lkwinta%2FKirkpatrick-Algorithm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lkwinta%2FKirkpatrick-Algorithm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lkwinta","download_url":"https://codeload.github.com/lkwinta/Kirkpatrick-Algorithm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lkwinta%2FKirkpatrick-Algorithm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32469344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-30T13:12:12.517Z","status":"ssl_error","status_checked_at":"2026-04-30T13:12:06.837Z","response_time":57,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["geometric-algorithms","kirkpatrick-algorithm","point-location","python","triangulation"],"created_at":"2024-12-16T09:39:03.834Z","updated_at":"2026-04-30T15:33:00.526Z","avatar_url":"https://github.com/lkwinta.png","language":"Jupyter Notebook","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Opis\nAlgorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji. \u003cbr\u003e\nAlgorytm wymaga preprocessingu w czasie $\\mathcal{O}(n \\log{}n)$ \u003cbr\u003e\nNastępnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\\mathcal{O}(\\log{}n)$\n\u003cbr\u003e\n\u003cbr\u003e\nBiblioteka składa się z pakietu `visualizer`, który wykorzystywany jest przez bibliotekę do wizualizacji działania algorytmu i wyniku lokalizacji. Właściwa biblioteka znajduje sie w pakiecie `kirkpatrick_point_location`, zbiera ona funkcje potrzebne do działania algorytmu w przyjazny interfejs. W pakietach można znaleźć \nNotebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.\n\u003cbr\u003e\n\u003cbr\u003e\nDo triangulacji początkowej figury użyto triangulacji Delaunaya, a następnie do triangulacji \"dziur\" powstałych przez usunięcie zbioru niezależnych wierzchołków użyto algorytmu earcut.\n\n# Instalacja\n\nNajpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:\n\n```\ngit clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git\n```\n\nPobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:\n\n```\nconda create --name kirkpatrick --file kirkpatrick.txt\nconda activate kirkpatrick\n```\n\nNastępnie uruchom:\n\n```\npython3 setup.py sdist\npython3 -m pip install -e .\n```\nOtwórz Jupyter Notebook z listy programów w Conda Navigator, pamiętaj, żeby na górze zaznaczyć Twoje środowisko (kirkpatrick). Jeśli nie znajduje modułu kirkpatrick spróbój zrestartować środowisko i jupytera:\n```\nconda deactivate\nconda activate kirkpatrick\n```\n\n\nW celu uniknięcia błędów wziązanych ze ścieżkami do różnych wersji interpreterów pythona sugerujemy korzystanie z Linuxa, a na Windowsie zainstalowanie WSL-a i właśnie w nim uruchamianie wszystkich komend.\n\nW razie problemów z brakiem biblioteki `tkinter` przy rysowaniu można skorzystać z polecenia\n```\nsudo apt-get install python3-tk\n```\n\n# Korzystanie z biblioteki\n\n## Główna biblioteka\nAby użyć biblioteki należy ją zaimportować w poniższy sposób:\n```py\nfrom kirkpatrick_algorithm.kirkpatrick_point_location.point_location import Kirkpatrick\n```\nNastępnie definiujemy przykładowy wielokąt i inicjalizujemy nim obiekt biblioteki. Konstruktor przyjmuję listę krotek będących współrzędnymi punktów wielokąta.\n```py\npolygon = [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]\nkirkpatrick = Kirkpatrick(polygon)\n```\nKolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.\n```py\nkirkpatrick.preprocess()\n```\nSamą lokalizację punktu wywołujemy przez funkcję `query`, która przyjmuje krotkę ze współrzędnymi punktu do lokalizacji, a zwraca obiekt `Triangle` z biblioteki `planegeometry` jako zlokalizowany\ntrójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.\n```py\nfound_triangle = kirkpatrick.query((3, 5))\n```\nListę wszystkich trójkątów można otrzymać funkcją `get_triangles()`.\n```py\nall_triangles = kirkpatrick.get_triangles()\n```\nMożna też skorzystać z funkcji `query_with_show`, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.\n```py\nkirkpatrick.query_with_show((3, 5))\n```\n![Wizualizacja generowana przez powyższy kod](images/query_example.png#center)\n\n## Biblioteka z wizualizacją\nW pakiecie `kirkpatrick_point_location_visualization` znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.\u003cbr\u003e\nBibliotekę należy zaimportować w następujący sposób\n```py\nfrom kirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualization import KirkpatrickVisualization\nfrom kirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualization import KierkpatrickInteractiveVisualization\n```\nPodobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny\n```py\npolygon = [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]\nkirkpatrick_vis = KirkpatrickVisualization(polygon)\n```\nPóźniej należy uruchomić przetwarzanie wielokąta\n```py\nkirkpatrick_vis.preprocess()\n```\n\nAby zadać punkt do sprawdzenia można użyć funkcję `query`. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu `Triangle`:\n```py\n_ = kirkpatrick_vis.query((5,4))\n```\n\nNastępnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji \n`show_prep`. \n```py\nkirkpatrick_vis.show_prep()\n```\n\nA aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z \n```py\nkirkpatrick_vis.show_query()\n```\n\nA z kolei wywyołanie poniższej instrukcji otworzy interaktywną wizualizację w której można samemu zadać wielokąt i punkt do sprawdzenia oraz przewijać kolejne kroki algorytmu \n```py\nKirkpatrickInteractiveVisualization()\n```\n\n# Żródła\nhttps://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf\u003cbr\u003e\nhttps://github.com/rkaneriya/point-location","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flkwinta%2Fkirkpatrick-algorithm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flkwinta%2Fkirkpatrick-algorithm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flkwinta%2Fkirkpatrick-algorithm/lists"}