Подтвердить что ты не робот

Смещение многоугольников в Javascript

EDIT5: Наконец, появилась библиотека Angus Johnson Clipper, реализованная в Javascript, и выбранная Sourceforge для хоста.

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

Источник загрузки: https://sourceforge.net/projects/jsclipper/

Википедия с пошаговым руководством: https://sourceforge.net/p/jsclipper/wiki/Home%206/

Презентация демонстрационной программы, включающей десятки образцов полигонов: https://sourceforge.net/p/jsclipper/wiki/Main_Demo%206/

Я надеюсь, что это поможет любому, кому нужна библиотека обрезки полилинии и полигона со смещением функций.


EDIT4: Одна из возможностей - преобразовать pascal в javascript, используя http://p2js.gelicon.biz/en/. Пока не удалось. p2js.exe clipper.pas дает фатальную ошибку "Не удается найти систему единиц, используемую клипером".


EDIT: я нашел script # (Github), который, похоже, способен конвертировать С# в Javascript. Clipper lib доступен в С#, так что можно сделать С# → JS-преобразование с помощью Script # и как?

EDIT3: не преобразован с помощью Script #, но есть также Emscripten, но 4000 строк cpp, преобразованных в 300 000 строк Javascript, поэтому не вариант. Ручное преобразование кажется королем.


EDIT2: Я сделал пример, который показывает проблему. Используйте стрелку влево и вправо, чтобы применить смещение. На определенном расстоянии он работает нормально, но потом что-то идет не так. Желтый поглаженный многоугольник называется так называемым грубым смещенным полигоном, и AFAIK Clipper lib предоставляет способ позаботиться об удалении ненужных частей необработанного смещенного полигона.


Существует библиотека Clipper от Angus Johnson для компенсации полигонов.

Мне нужна эта функция в Javascript для смещения полигонов SVG.

Кто-нибудь сделал порт Javascript?

Если нет, я бы оценил некоторые рекомендации, например. следующее:
- насколько огромной была задача?
- какой из них выбрать для источника (Delphi, С#, С++)?
- все ли в lib необходимо для компенсации?

Библиотека Clipper дает следующие результаты, которые являются только требуемой функциональностью:

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

Некоторые ссылки:
- Файлы в Sourceforge
- Документация клипера
- Ответ на один столбец
- Смещение алгоритма

4b9b3361

Ответ 1

Я преуспел в переносе клипера на JS, и через некоторое время после тщательного тестирования выйдет его релиз. Кажется, что все функции можно было портировать.

Одна оговорка, поддержка 128 бит сокращена до 106 бит.

Одним из плюсов является доступ к большому пространству браузеров и возможность использования svg, vml, html5 canvas в качестве графического интерфейса.

Любые идеи, какой хост будет проще всего опубликовать, с возможностью демонстрации?


EDIT:

Наконец, появилась библиотека Angus Johnson Clipper, реализованная в Javascript и выбранная Sourceforge для хоста.

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

Загрузки: https://sourceforge.net/projects/jsclipper/

Википедия с пошаговым руководством: https://sourceforge.net/p/jsclipper/wiki/Home%206/

Презентация демонстрационной программы, включающей десятки образцов полигонов: https://sourceforge.net/p/jsclipper/wiki/Main_Demo%206/

Я надеюсь, что это поможет любому, кому нужна библиотека обрезки полилинии и полигона со смещением функций.

Ответ 2

Нет простых решений, когда речь идет о раздувании многоугольников. Если у вас есть вогнутый многоугольник, рано или поздно он сломается на несколько меньших полигонов, если вы уменьшите смещение. Поэтому я бы предложил использовать существующий, проверенный алгоритм (Clipper должен быть хорошим).

В вопросе о переносе С# на JS я бы сказал, что это конечно возможно, но вопрос в том, сколько времени потребуется, и будут ли инструменты автоматического портирования использоваться. Судя по этой дискуссии, я сомневаюсь в этом:

Я быстро набросился на использование ScriptSharp для перевода кода С# на Javascript, но существует слишком много несовместимых структур для использования этого и я не смог получить его для вывода файла javascript. Попытка реализовать алгоритм обрезания Vatti в Javascript, кажется, следующий шаг.

...

И да, это не поможет вам использовать всевозможные преобразования автоматики tools.The clipper имеет структуры данных, такие как Int64 или Int128, которые не существует в JS или AS. Я просто удалил их вообще. Int32 должен будет достаточно для большинства случаев, если вы не работаете над тем, что связано с географией или огромные карты.

Порт ActionScript один из упомянутых пользователей уже недоступен, к сожалению.