通过点平滑曲线,仅使用水平,垂直线和固定半径弧

时间:2012-07-06 14:31:19

标签: geometry smoothing graph-layout

给定一个有序的点列表,我想绘制一条穿过所有点的平滑曲线。曲线的每个部分可以是水平的,垂直的,也可以是给定半径为r的弧(所有弧都具有相同的半径)。过渡应该是平滑的,即一个部分末端的标题应该与下一个部分开头的标题相同。任何两个连续输入点之间可以有任意数量的弧或直线段。

它有点像火车轨道,应该正交或沿曲率固定的部分运行。

有没有一个好的算法来构建这样的曲线? (或者,如果不能这样一行,我想知道。)

我研究了Bezier曲线,但这看起来有点矫枉过正,我无法找到一种强制执行约束的好方法。

1 个答案:

答案 0 :(得分:2)

上面提到的内容对我来说意味着你在点之间寻找曲线的切线连续性(类似于在节点处具有切线连续性的样条曲线)。火车轨道类比至少传达了这一要求。鉴于直线的严格限制,以及固定的半径圆弧,我相当肯定你将无法做到这一点。如果您需要这样的平滑度,为什么不考虑点的样条插值呢? 要了解原因,请考虑以下图片:

possible data point configuration

考虑用圆弧替换B和C之间的线段。你可以这样做来使连接连续,但要使它连续切线,你需要大量的好运,因为只有一个的圆是相切连续的线段AB也接触点C.该圆在C处切线与线CD的切线匹配的可能性很小。您的数据可能会像这样排列,但您不能依赖它。

如果我误解了你的问题,请告诉我,我会调整答案。