Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.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
Algorithm 联合;包含bezier曲线的相邻多段线;_Algorithm_Core Graphics_Computational Geometry - Fatal编程技术网

Algorithm 联合;包含bezier曲线的相邻多段线;

Algorithm 联合;包含bezier曲线的相邻多段线;,algorithm,core-graphics,computational-geometry,Algorithm,Core Graphics,Computational Geometry,具体示例:以欧洲国家地图和指向“代表欧盟国家的路径”的指针列表为例,输出单个“代表欧盟的路径” e、 g.如果我有三个输入路径:红色、绿色和蓝色 红色仅由直线段组成 绿色由线段和贝塞尔曲线组成 蓝色仅由贝塞尔制成 …然后我需要创建一条带有beziers的输出多段线,这是三个对象的并集 此外,我需要处理输入数据中的一些误差-c.f。下面的图像在输入形状之间有一些非常小的“间隙”。在图像中,下图(红色)是所需的输出 这很容易就会出现可怕的错误,我需要数周的时间才能让它正常工作。我正试图找到一种相对

具体示例:以欧洲国家地图和指向“代表欧盟国家的路径”的指针列表为例,输出单个“代表欧盟的路径”

e、 g.如果我有三个输入路径:红色、绿色和蓝色

  • 红色仅由直线段组成
  • 绿色由线段和贝塞尔曲线组成
  • 蓝色仅由贝塞尔制成
  • …然后我需要创建一条带有beziers的输出多段线,这是三个对象的并集

    此外,我需要处理输入数据中的一些误差-c.f。下面的图像在输入形状之间有一些非常小的“间隙”。在图像中,下图(红色)是所需的输出

    这很容易就会出现可怕的错误,我需要数周的时间才能让它正常工作。我正试图找到一种相对简单的方法,可能“足够好”,但我目前一直坚持:

  • 你是怎么开始联合贝塞尔的
  • 处理“差距”/“误差”的聪明方法是什么?我确信简单地将我的浮动坐标四舍五入是有点狡猾的,但我看不出来:(

  • 最后…目标平台是iPhone-因此我可以访问所有苹果的Quartz/QuartzCore/CoreAnimation/等,这些都提供了一些实用方法-但请注意:即使是苹果的官方基础实现,如“路径A是否与路径B相交?”在很多情况下都严重损坏/不正确-因此它不是非常可靠:(.

    关于如何实现这一点的想法(也许)-但我也不知道如何实现这一点:

    也许……相反,计算“内部线”,并删除它们,留给我一个几乎正确的东西,即“描述联盟的路径”

    我的示例蓝色对象可能有很大的错误,交叉点可能会给出一条严重错误的曲线,但可能已经足够好了

    为此,我在想,也许:

  • 以每个形状的凸面外壳为例
  • 外壳中与其他外壳重叠的任何线段…都是“内部的”
  • …读回创建每个船体线段(或该段使其无效)的原始形状中的点…这些点是“联合内部的”

  • 首先,你需要知道如何合并多边形形状。我想你知道,如果不知道,你必须先学习

    现在,您可以对曲线进行镶嵌,找到多边形并集,并将原始曲线的各个部分重新拟合到并集中。您必须稍微调整交点,从直线交点到曲线交点,但调整量很小,您可以使用简单的迭代近似算法找到它们

    若要处理错误,请在并集之前将多边形偏移一个初始值,并在拟合曲线片段之前将结果偏移一个负值


    很抱歉,无法在此手机上键入更多内容:-(

    凸面外壳在这个问题的上下文中没有意义。偏移多边形?这是如何工作的?您的意思可能是“沿直线从原点到线段中点偏移每个线段”?缩放它们可以作为一个第一近似值-如果你有纯凸多边形-但在凹多边形上失败。设置基本上是一个带圆盘的Minkowski和,这是一个相当标准的操作,查找“多边形偏移”。它通常是这样实现的:在垂直于线段本身的方向上移动每个线段,移动相同的距离,然后重新计算交点。有些库具有此操作。缩放确实不起作用。“多边形偏移”-大多数点击是针对OpenGL的,正如我所期望的那样定义它(单个平移应用于所有点),但我找到了一些“向内/向外多边形偏移”的匹配项,它完成了轨迹,谢谢