Выбор правильной технологии (SVG vs Canvas)

Я пишу приложение для манипуляции с фигурами, чтобы после создания простых фигур пользователь мог создавать более сложные, обрезая фигуры друг против друга (т.е. объединяя два круга вместе в фигуру 8, сохраненную с использованием одного пути, а не группы, или выполняю пересечение двух окружностей, чтобы создать метку "укуса"), и пытаюсь выбрать графическую библиотеку для использования.

SVG, кажется, обрабатывает 80% необходимых мне функций из коробки (хранение фигур, перемещение, вращение, масштабирование). Проблема в том, что другие 20% (используя обрезку для создания нового набора сложных многоугольников), кажется, невозможно достичь без воссоздания функциональности SVG в моих собственных модулях (мне пришлось бы сохранять фигуру один раз для рисования внутри SVG, и один раз для Обрабатывать отсечение самостоятельно). Я могу ошибаться в отношении SVG, но, читая о библиотеке Raphael (основанной на SVG), кажется, что она обрабатывает только отсечение с помощью прямоугольника, и даже это ограничение является временным (оно только визуализирует часть фигуры, но сохраняет всю фигуру) перерисовывается после перемещения прямоугольника отсечения). Возможно, я просто запутался в стандарте SVG, но даже получение / разбор путей для вычисления нового пути с использованием подмножеств предыдущих путей кажется неочевидным в SVG (есть функция Subpath (), но я не вижу ничего, чтобы найти точки пересечения двух периметров полигона или объединить несколько подпутей в один путь).

В результате Canvas кажется лучшей альтернативой, поскольку он не вносит дополнительных издержек, отслеживая формы, которые я уже должен был отслеживать, чтобы моя собственная реализация отсечения работала. Мало того, я уже реализовал класс полигонов, который можно перемещать, поворачивать и масштабировать. Однако у Canvas есть и другие проблемы (мне пришлось бы реализовать свой собственный метод перерисовки, который, я уверен, не будет столь же эффективным, как SVG, использующий преимущества специфичных для браузера сред в Chrome и Firefox; принять IE несовместимость, которая обрабатывается бесплатно с библиотеками, такими как Raphael).

Спасибо

Ответы на вопрос(3)

Ваш ответ на вопрос