如何正确绘制路径?

时间:2016-05-20 21:56:21

标签: java drawing interpolation spline apache-commons-math

我正在为一个Path drawing algorythm进行重写。 我正在使用apache-commons-math的Spline Interpolator来获得2D空间中所有给定点的平滑路径......

目前我有:

@font-face

这背后的想法是,由于SplineInterpolator只接受函数(例如f(x)= y)并且x必须增加,我们将点数组分成2个双数组并插入2次...... <登记/> 首先是X值,然后是Y值...
作为X值,称为“索引”的“虚拟数组”的第一个值为0,第二个值为1,第三个值为2,依此类推... 为了绘制这条路径,我正在绘制一条从0点到1点的线,1到2点,2点到3点,依此类推......

有两件事要考虑......

  1. 选择1作为索引中的步长是否有意义?这可能会导致不准确,因为java double只有64位,我们使用静态1步长拉伸和压缩值。如果是这样,我可以改变什么来优化这个......
  2. 第二,这两个双阵列怎么能更好地画出来?我尝试绘制多行并不是很好 - 这是因为我在太大的步骤中读取插值?
  3. 非常感谢任何帮助

    编辑: Path Zoomed in Whole Image

1 个答案:

答案 0 :(得分:1)

选择1作为'index'数组的步长是所谓的均匀参数化,除非您的数据点也相对均匀地分布,否则通常不会产生良好的结果。我建议使用弦长参数化或向心参数化,如下所示:

t0 = 0.0
t1 = d1/L
t2 = t1 + d2/L  
t3 = t2 + d3/L
............
t(n-1)= 1.0.

其中

d1=|P1-P0|^e, d2=|P2-P1|^e, d3=|P3-P2|^e and L = d1+d2+d3+.....d(n-1). 

对于弦长参数化,在上面的公式中使用e = 1.0。对于向心参数化,使用e = 0.5。请注意,使用e = 0.0只会导致均匀参数化。如果您的数据点具有非常不均匀的分布(即,点之间的一些距离很大而一些很小),向心参数化通常会导致比弦长参数化更好的结果。