参数化曲线的 alphaArc 长度重新参数化表示为 R 中的表达式

alphaArc length reparameterization of a parametric curve represented as an expression in R

我已经为尝试实现 pracma 的 arclength() 函数而苦苦挣扎了一段时间。根据我到目前为止所尝试的内容,我得到的两个错误是:

Error in arclength(f, t1, t2) : 
  Argument 'f' must be a parametrized function. 

Error in arclength(f, t1, t2) : 
  Argument 'f' must be a vectorized function.

我有一条参数化曲线定义为 3 个表达式的向量。曲线是位于平面 z=-1 上的椭圆,由下式给出:

inputCurve = expression(0.5*cos(t), sin(t),-1)

我直接从文档中获取的代码在这里。理想情况下,代码应该根据 arcLength:

重新参数化 inputCurve
arcLengthUtil$arcLengthParametrize <- function(inputCurve){
  
  
  
  f <- function(t) c(eval(quote(inputCurve)))
  
  
  t1<-0; t2<- 2*pi
  a<-0;b<-arclength(f,t1,t2)$length
  
  fParam <-function(s){
    fct <- function(u) arclength(f,a,u)$length -s
    urt<- uniroot(fct, c(a, 2*pi))
    urt$root
  }
 

  return(fParam)
}

我将表达式作为向量传递给 f,所以我不确定为什么会收到此错误。根据我的理解,eval() 应该 return 一个可以在 f 中调用的表达式。我曾尝试在 f 上使用 Vectorize() 函数,然后将其传递给 arcLength(),但收到 'f' 必须是参数化函数的错误。我觉得这是一个相当简单的问题,但如果有人能提供一些建议,我将不胜感激。谢谢

##  Example: parametrized 3D-curve with t in 0..3*pi
f <- function(t) c(sin(2*t), cos(t), t)
arclength(f, 0, 3*pi)

这是文档中的示例之一,我只是想知道如何将由表达式向量定义的输入曲线传递到我的函数中 'f',因为我需要将曲线声明为以上述形式。

一些不靠谱的代码,但如果您需要使用表达式向量,这会起作用。

f <- eval(parse(text=paste0("function(t) c(t*0+",paste(inputCurve,collapse=",t*0+"),")")))

这将创建一个函数 f 以在 arclength 函数中使用,其语法与问题中的语法相同。当并非所有表达式都包含变量输入时,collapse 参数的 t*0+ 部分对于 f 到 return 与输入长度相同的向量是必需的。