拟合闭合曲线,然后从该曲线绘制等距点

时间:2016-01-04 08:03:11

标签: r

我试图获得一条必须准确的闭合曲线 通过所有点(如下所示)并尝试使用R从图中获取样本100等距点。可以连接第一个和最后一个点以获得闭合曲线。

这是一个设定点

X            Y
-0.04494395  -0.051481617
-0.01102178  -0.032550217
0.01193315   -0.072318417
0.04585535   -0.053448067
0.07975850   -0.034595817
0.05682070   0.005183833
0.03377230   0.045034983
0.01057130   0.085048283
-0.02335468  0.066181283
-0.05729975  0.047296183
-0.03407970  0.007294283
-0.06801145  -0.011644717

我想使用样条拟合(不是回归)。在这方面有人能帮助我吗? 这是迄今为止尝试的内容

d=splinefun(x, y,method = c("natural"))

我坚持到这里:如何从这个功能获得100个等距点?

2 个答案:

答案 0 :(得分:3)

也许这会让你开始。 xspline函数允许创建闭合样条 - 尽管我不确定如何控制插值点的数量。 This answer演示了xspline函数的使用。

df <- read.table(text="
   x         y
                 -0.04494395 -0.051481617
                 -0.01102178 -0.032550217
                 0.01193315 -0.072318417
                 0.04585535 -0.053448067
                 0.07975850 -0.034595817
                 0.05682070  0.005183833
                 0.03377230  0.045034983
                 0.01057130  0.085048283
                 -0.02335468  0.066181283
                 -0.05729975  0.047296183
                 -0.03407970  0.007294283
                 -0.06801145 -0.011644717
                 ",
                 header=TRUE
)


plot(y ~ x, df)
spl <- xspline(df$x, df$y, open=FALSE, shape = -0.5, draw=FALSE) 
lines(spl)

enter image description here

答案 1 :(得分:0)

将形成超过100分,但我认为这符合您的目标:

    df <- read.table(text="
   x         y
                 -0.04494395 -0.051481617
                 -0.01102178 -0.032550217
                 0.01193315 -0.072318417
                 0.04585535 -0.053448067
                 0.07975850 -0.034595817
                 0.05682070  0.005183833
                 0.03377230  0.045034983
                 0.01057130  0.085048283
                 -0.02335468  0.066181283
                 -0.05729975  0.047296183
                 -0.03407970  0.007294283
                 -0.06801145 -0.011644717
                 ",
                 header=TRUE
)


xy<-xspline(df$x,df$y,draw = F,shape = -0.5,open = F)
xy

plot(xy$x,xy$y)

xspline(df$x,df$y,open = F,shape = -0.5)

Here is the graph: