【发布时间】:2017-09-19 22:41:58
【问题描述】:
目标是通过像多边形画笔一样在屏幕上拖动鼠标来进行简单的矢量图像编辑,创建画笔的Minkowski sum 和鼠标的路径。新多边形将从任何先前存在的不同颜色的多边形中减去,并与任何现有的相同颜色的多边形合并。
计划是将每次鼠标移动作为从鼠标先前位置到当前位置的线段,计算该线段上的 Minkowski 和,然后使用Weiler–Atherton clipping algorithm 更新现有多边形以包含该 Minkowski总和。
由于 Weiler–Atherton 似乎在每次鼠标移动时运行都会导致 UI 延迟,我们计划通过将其放入另一个线程来延迟该步骤,该线程可以花时间赶上最新的鼠标移动,或者保存所有 Weiler–Atherton 计算直到绘图完成,然后在保存时作为批量操作执行。我们担心这可能会导致大量重叠多边形的积累,以至于 UI 会延迟渲染所有多边形所需的时间。
问题是:上面的计划是 Inkscape 和其他严肃的矢量图形编辑软件执行此操作的方式吗?这似乎是一个疯狂的计划,无论是算法的复杂性还是计算复杂性。专家会怎么做?
正在考虑的另一个选项:使用简单的光栅操作进行绘画,然后将光栅转换为矢量图像作为最后一步。从光栅到矢量的转换似乎并不比 Weiler-Atherton 简单,并且最终输出的质量可能会受到影响,但它会是更好的选择吗?
【问题讨论】:
-
为每次鼠标移动运行这些算法似乎不太可能导致性能问题。计算机游戏引擎每帧运行大量的计算几何内容。
标签: algorithm computational-geometry vector-graphics