2

我有一个 3×N 矩阵X,其列是单位球面上的向量(即,每个向量的欧几里得长度是1),我有一个 1×N 向量Theta,其条目都是 和 之间的所有0角度pi。对于每一个i,在球体上都有一个以 为中心的圆,该圆X(:,i)定义为与 夹角为 的所有点的Theta(i)集合X(:,i)。我想从每个圆圈中得到一个统一的样本i,避免for循环,因为它们在 Matlab 中可能很慢。我知道在矢量化的 Matlab 代码中,如果Theta我假设所有圆的中心为[0,0,1]) 旋转[0,0,1]到另一个所需的向量x,所以对于每一个i,我可以将这个旋转矩阵应用于我获得的样本点,假设[0,0,1]是中心。

我想对所有i没有 for 循环的人都这样做,即使用数组/矩阵/向量表示法。

4

1 回答 1

3

如果您使用Rodrigues 的旋转公式,则您正在尝试将轴角表示转换为旋转矩阵。你很幸运。我碰巧已经编写了快速矢量化代码来完全按照我认为您的要求进行操作。你可以在这里找到代码:axang2rotmat.m. 使用非常简单(阅读帮助):

n = 1e3;                % Number of axis-angles and rotation matrices
th = pi*rand(1,n);      % Random rotation angles between 0 and pi
v  = normc(rand(3,n));  % Random rotation vectors, normalized across columns
R = axang2rotmat(v,th); % Generate n rotation matrices, R is 3-by-3-n

请注意,上面的代码只是为了演示使用,axang2rotmat不会为您提供统一采样的旋转矩阵(有关原因和解决方法的详细信息,请参见Miles, Biometrika 1962 )。但是,我建议您直接计算随机旋转矩阵。您可以为此使用我的另一个功能:randrotmat.m.

我还有将旋转矩阵转换回轴角的代码,并在此处检查特定矩阵是否为旋转矩阵。

于 2013-07-24T17:02:06.613 回答