gpt4 book ai didi

matlab - 在matlab中有效地从球体上的许多圆圈均匀采样

转载 作者:行者123 更新时间:2023-12-04 04:48:19 25 4
gpt4 key购买 nike

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

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

最佳答案

如果您使用的是 Rodrigues' rotation formula ,您正在尝试从 axis-angle 转换代表到 rotation matrices .你很幸运。我碰巧编写了快速矢量化代码来完成我相信您要问的事情。你可以在这里找到代码: 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 .

我还有代码将旋转矩阵转换回轴角并检查特定矩阵是否是旋转矩阵 here .

关于matlab - 在matlab中有效地从球体上的许多圆圈均匀采样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17839579/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com