使用R求一个向量到另一个向量的旋转矩阵

使用R求一个向量到另一个向量的旋转矩阵,r,rotation,geometry,R,Rotation,Geometry,我想用R计算两个n维向量之间的一个(任意)旋转矩阵。包括一个Matlab算法,该算法允许找到一个旋转矩阵,将向量x转换为另一个向量y。代码可以转换为R: # Function returns a rotation matrix transforming x into y rotation = function(x,y){ u=x/sqrt(sum(x^2)) v=y-sum(u*y)*u v=v/sqrt(sum(v^2)) cost=sum(x*y)/sqrt(sum(x^

我想用R计算两个n维向量之间的一个(任意)旋转矩阵。

包括一个Matlab算法,该算法允许找到一个旋转矩阵,将向量x转换为另一个向量y。代码可以转换为R:

# Function returns a rotation matrix transforming x into y
rotation = function(x,y){
  u=x/sqrt(sum(x^2))

  v=y-sum(u*y)*u
  v=v/sqrt(sum(v^2))

  cost=sum(x*y)/sqrt(sum(x^2))/sqrt(sum(y^2))

  sint=sqrt(1-cost^2);

  diag(length(x)) - u %*% t(u) - v %*% t(v) + 
    cbind(u,v) %*% matrix(c(cost,-sint,sint,cost), 2) %*% t(cbind(u,v))
}


x=c(2,4,5,3,6)
y=c(6,2,0,1,7)

# Same norm  
sqrt(sum(x^2))
sqrt(sum(y^2))

Rx2y = rotation(x,y) 
x %*% Rx2y

#>      [,1] [,2]          [,3] [,4] [,5]
#> [1,]    6    2 -8.881784e-16    1    7

到目前为止你试过什么?你有没有找到一个你可以在这里建议的算法/公式?目前这是一个“给我密码”的问题…@BenBolker我不认为这是“给我密码”的问题。这相当于一个问题“请告诉我,在我开始写我自己的代码之前,我是否发现了一些内置的东西”。谢谢你,本,我已经尝试通过包括我已经做的事情来改进我的问题。我的问题更多的是阿维斯基指出的方向,不是“给我密码”,而是“寻找图书馆/资源”。。。