如何获得封闭贝塞尔曲线的正确形状轮廓?

时间:2016-02-27 19:26:42

标签: c# bezier

我有一个由(立方)贝塞尔曲线和直线组成的定向闭合路径,它代表笔划。当我过度简化它时,它看起来像这样:

Directed closed path of bezier curves Two inner cycles in red colour

最后,我需要获得形状轮廓。我可以识别内部路径周期(上面第二张图中以红色突出显示),但无法确定它们是否存在代表形状上的一个洞。我到目前为止所做的是在内循环中得到一个点并计算它的蜿蜒数(使用nonzero-rule),并且在大多数情况下它结果非常好。

但事实并非如此。无论我从哪个方向投射来自小内循环的射线,绕组数总和(正确)为零,表明那里应该本能地没有一个洞。两个例子:

Ray intersects with a line and bezier curve Ray intersects with two bezier curves

可能有帮助的是,我可以区分笔划的两侧,这意味着我可以识别它的开始和结束(黄橙色线)和侧面路径(绿色和蓝色)。

All paths are distinguishable

我可以想到一些可以提供帮助的方法。例如,两次穿过相同的路径(绿色)并且不符合它的对应物(蓝色)两次表示测试点位于笔划内部并且我可以安全地移除其内部循环谎言(除非它同时位于多个内部周期内,但在我的情况下并不会发生)。如果我没有遇到蓝色对应物,但黄色线反而是什么呢?

问题:有什么方法可以确定这个小周期是"内部"笔划?如果我能够做到这一点,我可以获得正确的形状轮廓,然后可能填写笔划。

为了清楚起见,当你想象笔画笔已经填满时,应该只有一个洞,而不是两个洞,正如非零蜿蜒规则所暗示的那样。

Filled pen stroke

谢谢。

0 个答案:

没有答案
相关问题