Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Opis

Algorytm Kirkpatricka - algorytmy pozwalający lokalizować przynależność punktu w przestrzeni 2D do jednostki podziału - trójkąta triangulacji.
Algorytm wymaga preprocessingu w czasie $\mathcal{O}(n \log{}n)$
Następnie każde zapytanie dla przygotowanego wielokąta realizowane jest w casie $\mathcal{O}(\log{}n)$

Biblioteka 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źć Notebook jupytera pokazujący działanie poszczególnych etapów działania algorytmu.

Do 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.

Instalacja

Najpierw sklonuj repozytorium będąc w folderze do którego chcesz je sklonować, na przykład za pomocą:

git clone https://github.com/lkwinta/Kirkpatrick-Algorithm.git

Pobierz Anacondę, odpal Anaconda Prompt i przejdź do folderu Kirkpatrick-Algorithm, tam stwórz środowisko:

conda create --name kirkpatrick --file kirkpatrick.txt
conda activate kirkpatrick

Następnie uruchom:

python3 setup.py sdist
python3 -m pip install -e .

Otwó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:

conda deactivate
conda activate kirkpatrick

W 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.

W razie problemów z brakiem biblioteki tkinter przy rysowaniu można skorzystać z polecenia

sudo apt-get install python3-tk

Korzystanie z biblioteki

Główna biblioteka

Aby użyć biblioteki należy ją zaimportować w poniższy sposób:

fromkirkpatrick_algorithm.kirkpatrick_point_location.point_locationimportKirkpatrick

Nastę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.

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick=Kirkpatrick(polygon)

Kolejnym potrzebnym krokiem jest wywołanie funkcji przetwarzającej wielokąt. Bez tego algorytm będzie wyrzucał wyjątek przy próbie lokalizacji punktu.

kirkpatrick.preprocess()

Samą 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 trójkąt. Gdy punkt znajduje się poza zewnętrznym trójkątem, funkcja zwraca None.

found_triangle=kirkpatrick.query((3, 5))

Listę wszystkich trójkątów można otrzymać funkcją get_triangles().

all_triangles=kirkpatrick.get_triangles()

Można też skorzystać z funkcji query_with_show, która lokalizuje punkt oraz rysuje wszystkie trójkąty oraz zlokalizowany trójkąt.

kirkpatrick.query_with_show((3, 5))

Wizualizacja generowana przez powyższy kod

Biblioteka z wizualizacją

W pakiecie kirkpatrick_point_location_visualization znajduje się biblioteka pozwalająca generować obazki pokazujące kolejne kroki działania algorytmu.
Bibliotekę należy zaimportować w następujący sposób

fromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_visualizationimportKirkpatrickVisualizationfromkirkpatrick_algorithm.kirkpatrick_point_location_visualization.point_location_interactive_visualizationimportKierkpatrickInteractiveVisualization

Podobnie jak w głownej bibliotece należy zainicjalizować obiekt biblioteczny

polygon= [(5,5), (3,4), (6,3), (4,2), (6,0), (7,1), (8,4)]
kirkpatrick_vis=KirkpatrickVisualization(polygon)

Później należy uruchomić przetwarzanie wielokąta

kirkpatrick_vis.preprocess()

Aby zadać punkt do sprawdzenia można użyć funkcję query. Podobnie jak w zwykłej bibliotece zwraca ona obiekt typu Triangle:

_=kirkpatrick_vis.query((5,4))

Następnie aby wyświetlić kroki przetwarzania można skorzystać z funkcji show_prep.

kirkpatrick_vis.show_prep()

A aby wyswietlic kolejne kroki lokalizacji mozna skorzystac z

kirkpatrick_vis.show_query()

A 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

KirkpatrickInteractiveVisualization()

Żródła

https://ics.uci.edu/~goodrich/teach/geom/notes/Kirkpatrick.pdf
https://github.com/rkaneriya/point-location

About

Kirkpatrick Algorithm - implementation of point location algorithm in 2D triangulated space

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Used by

Contributors

Languages