Pytanie Przesuwanie wielokątów w JavaScript


EDIT5: W końcu biblioteka Clipper Angus Johnson została zaimplementowana w Javascript i wybrana Sourceforge dla hosta.

LIVE DEMO: http://jsclipper.sourceforge.net/6.1.1.1/main_demo.html

Pobierz źródło: https://sourceforge.net/projects/jsclipper/

Wikipage z samouczkiem krok po kroku: https://sourceforge.net/p/jsclipper/wiki/Home%206/

Prezentacja programu demonstracyjnego zawierającego dziesiątki przykładowych wielokątów: https://sourceforge.net/p/jsclipper/wiki/Main_Demo%206/

Mam nadzieję, że pomoże to każdemu, kto potrzebuje polifonicznej i wielobokowej biblioteki przycinającej z funkcjami kompensacji.


EDIT4: Jedną z możliwości jest zamiana pascal na javascript przy użyciu http://p2js.gelicon.biz/en/ . Jeszcze się nie udało. p2js.exe clipper.pas daje błąd krytyczny "Nie można znaleźć systemu jednostek używanego przez maszynkę".


EDYCJA: znalazłem scenariusz# (Github), który wydaje się być w stanie przekonwertować C # do Javascript. Clipper lib jest dostępny w języku C #, więc czy możliwe byłoby wykonanie konwersji C # -> JS przy użyciu Script # i jak?

EDIT3: Nie został przekonwertowany za pomocą skryptu nr #, ale istnieje również Emscripten, ale 4000 linii cpp zostało przekonwertowanych na 300 000 linii Javascript, więc nie jest to opcja. Ręczna konwersja wydaje się być królem.


EDIT2: Zrobiłem przykład, który pokazuje problem. Użyj strzałki w lewo i w prawo, aby zastosować przesunięcie. W pewnej odległości działa dobrze, ale potem coś idzie nie tak. Żółty obrysowany wielokąt to tzw. Surowy offsetowy wielokąt, a AFAIK Clipper lib zapewnia sposób na pozbycie się niepotrzebnych części surowego wieloboku offsetowego.


Istnieje biblioteka Clipper autorstwa Angusa Johnsona, która służy do kompensacji wielokątów.

Potrzebuję tej funkcji w JavaScript do kompensacji wielokątów SVG.

Czy ktoś zrobił port Javascript?

Jeśli nie, doceniłbym pewne wytyczne, np. następujące:
- jak ogromne byłoby to zadanie?
- który z nich wybrać dla źródła (Delphi, C #, C ++)?
- czy wszystko w bibliotece jest potrzebne do skompensowania?

Biblioteka Clippera daje następujące wyniki, które są tylko pożądaną funkcjonalnością:

Offset Polygons, polygons, delta, jointype, miterlimit, jtSquare jtRound jtMiter

Niektóre linki:
- Pliki w Sourceforge
- Dokumentacja Clippera
- Jedna odpowiedź Stackoverflow
- Algorytm przesuwania 


12
2017-11-06 10:18


pochodzenie


Nie rozwiązałeś tego już? stackoverflow.com/questions/12723832/... - Robert Longson
Coś, ale doceniłbym prostą nową geometrię (wielokąt) zamiast złożonych struktur masek lub sąsiednich zduplikowanych obiektów, które mogą nie działać na każdej platformie. - Timo Kähkönen


Odpowiedzi:


Udało mi się przenieść clippera do JS, a po pewnym czasie, po dokładnych testach, wypuszczę go. Wygląda na to, że cała funkcjonalność mogła zostać przeniesiona.

Jedno zastrzeżenie, wsparcie 128-bitowe jest zredukowane do 106-bit.

Jedną z zalet jest uzyskanie dużej przestrzeni przeglądarek i możliwość wykorzystania płótna svg, vml, html5 jako interfejsu graficznego.

Wszelkie pomysły, który host będzie najłatwiejszy do opublikowania, z możliwością demo?


EDYTOWAĆ:

Ostatecznie biblioteka Clipper Angus Johnson została zaimplementowana w JavaScript i wybrana jako Sourceforge dla hosta.

LIVE DEMO: http://jsclipper.sourceforge.net/6.1.1.1/main_demo.html

Pliki do pobrania: https://sourceforge.net/projects/jsclipper/

Wikipage z samouczkiem krok po kroku: https://sourceforge.net/p/jsclipper/wiki/Home%206/

Prezentacja programu demonstracyjnego zawierającego dziesiątki przykładowych wielokątów: https://sourceforge.net/p/jsclipper/wiki/Main_Demo%206/

Mam nadzieję, że pomoże to każdemu, kto potrzebuje polifonicznej i wielobokowej biblioteki przycinającej z funkcjami kompensacji.


4
2017-11-27 19:39





Nie ma prostych rozwiązań, jeśli chodzi o pompowanie wielokątów. Jeśli masz wklęsły wielokąt, prędzej czy później rozwinie się on na kilka mniejszych wielokątów, jeśli zmniejszysz wystarczająco przesunięcie. Sugerowałbym więc użycie istniejącego, sprawdzonego algorytmu (Clipper powinien być dobry).

Na pytanie dotyczące przeniesienia C # do JS, powiedziałbym, że jest to możliwe, ale pytanie brzmi, ile czasu zajmie i czy narzędzia do automatycznego portowania będą przydatne. Sądząc z ta dyskusja, Wątpię:

Zrobiłem szybkie ukłucie przy użyciu ScriptSharp do przetłumaczenia kodu C # na   JavaScript, ale istnieje zbyt wiele niekompatybilnych struktur do użycia   i nie mogłem uzyskać tego, aby wypisać plik javascript. Próbujesz wdrożyć   Algorytm obcinania Vatti w JavaScript wydaje się być kolejnym krokiem.

...

I tak, to nie pomoże ci w użyciu wszelkiego rodzaju konwersji automatycznych   narzędzia. Clipper ma struktury danych, takie jak Int64 lub Int128, które są   nie istnieje w JS lub AS. Właśnie je usunąłem. Int32 powinno   Wystarczająco dużo dla większości przypadków, chyba że pracujesz nad czymś związanym z geografią   lub ogromne mapy.

Port ActionScript, o którym wspomina jeden z użytkowników, niestety nie jest już dostępny.


2
2017-11-07 07:47



Jest to co najmniej dostępne: github.com/ChrisDenham/PolygonClipper.AS3. Masz rację, że automatyczna konwersja nie jest opcją. Wykorzystanie linii Emscripten 4000 cpp przekonwertowanych na 300 000 linii JS. Nie testowałem nawet jeśli działa ... - Timo Kähkönen