【问题标题】:Fitting a closed curve then drawing equidistant points from that curve拟合一条闭合曲线,然后从该曲线绘制等距点
【发布时间】:2016-01-04 08:03:10
【问题描述】:

我正在尝试获得一条必须完全走的闭合曲线 通过所有点(如下所示)并尝试使用 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 个等距点?

【问题讨论】:

标签: r


【解决方案1】:

也许这会让你开始。 xsplinefunction 允许创建闭合样条曲线 - 尽管我不确定如何控制插值点的数量。 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)

【讨论】:

  • 感谢马克的回答。这不是一条闭合曲线。我需要一条非自相交的闭合曲线。问题中给定的坐标是按这个顺序排列的。
  • 对这个误解深表歉意 - 上面是一个例子,但不幸的是,我不知道如何将点数设置为 100
  • 没问题。非常感谢上面的例子。
【解决方案2】:

会形成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:

【讨论】:

    猜你喜欢
    • 2017-03-31
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 2016-02-04
    相关资源
    最近更新 更多