我正在尝试计算一条类似Bezier样条曲线,它通过一系列的x-y坐标。例如,Matlab的函数的输出如下(示例链接):
我相信(不再维护的)grid
包曾经可以做到这一点(grid.xspline
函数?),但我无法安装存档版本的包,并且没有找到任何确切符合我的要求的示例。
bezier
包也看起来很有希望,但它速度非常慢,而且我也无法完全正确地使用它:
library(bezier)
set.seed(1)
n <- 10
x <- runif(n)
y <- runif(n)
p <- cbind(x,y)
xlim <- c(min(x) - 0.1*diff(range(x)), c(max(x) + 0.1*diff(range(x))))
ylim <- c(min(y) - 0.1*diff(range(y)), c(max(y) + 0.1*diff(range(y))))
plot(p, xlim=xlim, ylim=ylim)
text(p, labels=seq(n), pos=3)
bp <- pointsOnBezier(cbind(x,y), n=100)
lines(bp$points)
arrows(bp$points[nrow(bp$points)-1,1], bp$points[nrow(bp$points)-1,2],
bp$points[nrow(bp$points),1], bp$points[nrow(bp$points),2]
)
正如您所看到的,除了端点之外,它不经过任何点。
我将非常感激您提供的任何指导!
n
和n+1
之间的每个线段在点n
处具有与线(n-1)--(n+1)
平行的切线,在点(n+1)
处具有切线n--(n+2)
,切线向量的长度由您选择的“张力”确定。在张力为1/2时,它是立方Bezier曲线的等效曲线(是的,这意味着第一个和最后一个点的切线需要“编造”=) - Mike 'Pomax' Kamermans