Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Geometry 如何生成一个";厚的;贝塞尔曲线?_Geometry_Bezier - Fatal编程技术网

Geometry 如何生成一个";厚的;贝塞尔曲线?

Geometry 如何生成一个";厚的;贝塞尔曲线?,geometry,bezier,Geometry,Bezier,我正在寻找一种通过编程“加厚”贝塞尔曲线来生成多边形的方法。大概是这样的: 我最初的想法是找到直线上的法线,并从中生成多边形: 但问题是法线可以在陡峭的曲线中相互交叉,如下所示: 有没有从贝塞尔曲线生成多边形的公式或算法?我在互联网上找不到任何信息,但可能我用了错误的词搜索…如果你想要一个恒定的厚度,这叫做偏移曲线,你使用法线的想法是正确的 这确实带来了两个困难: 偏移曲线不能精确表示为贝塞尔曲线;您可以改为使用多段线,或将Bezier改装为多段线 当曲率半径小于偏移宽度时,确实会出现尖点

我正在寻找一种通过编程“加厚”贝塞尔曲线来生成多边形的方法。大概是这样的:

我最初的想法是找到直线上的法线,并从中生成多边形:

但问题是法线可以在陡峭的曲线中相互交叉,如下所示:


有没有从贝塞尔曲线生成多边形的公式或算法?我在互联网上找不到任何信息,但可能我用了错误的词搜索…

如果你想要一个恒定的厚度,这叫做偏移曲线,你使用法线的想法是正确的

这确实带来了两个困难:

  • 偏移曲线不能精确表示为贝塞尔曲线;您可以改为使用多段线,或将Bezier改装为多段线

  • 当曲率半径小于偏移宽度时,确实会出现尖点。必须检测多段线的自交点

  • 据我所知,没有简单的解决办法


    有关更多信息,请查看。

    我写了一篇博客,介绍了生成偏移曲线的过程:

    下面是一个交互式示例:


    这是一个难题。蒂勒·汉森(Tiller Hanson,见我对这个问题的回答:)是合理的近似值,但提问者特别提出了“法线可以在陡峭的曲线中相互交叉”的困难;另一种看法是,使用法线创建的封套可能会产生无限多个循环,这取决于法线的间距

    没有自相交的完美解决方案是圆和线的包络线。不过,我认为得到这样一个信封是不切实际的:你可能不得不接受十字路口

    另一个有趣但令人畏惧的事实是,正如理查德·金奇在《代数告诉我们》中所指出的那样 画一条三次多项式曲线(椭圆 由Bézier曲线逼近)沿第三条曲线 次多项式曲线(曲线的Bézier曲线) 冲程路径)产生6度包络曲线。 我们将不得不精确估计这些6度
    用三次(贝塞尔)曲线包络曲线“

    这里我有关于这个主题的数学论文


    此处的图像描述]]

    这可能会有帮助:这个问题。您可能会对另一个术语感兴趣:展平。这是将曲线分解为小线段的过程。也看到了。这是非常优雅的。我一直在做一个近似解很长时间了。你的解决方案对我的工作非常有用。
    // code is too big to post here, please see the source on codepen