【问题标题】:Find rotation matrix with two vectors找到具有两个向量的旋转矩阵
【发布时间】:2018-11-30 11:35:02
【问题描述】:

我想找到两个向量之间的旋转矩阵。

[0;0;1] = R * [0.0023;0.0019;0.9899]

如何找到 3*3 的旋转矩阵?

【问题讨论】:

  • @ZizyArcher 你是什么意思?两个向量都是 3 个元素...
  • @ZizyArcher 我建议在编程上下文中谈论向量 lengths 时使用“幅度”或“规范”这两个词,否则您的 cmets 很容易混淆。这里向量的长度通常是数组大小的一个属性;在 MATLAB 中,向量的 length 是元素的数量。另请注意,OP 给出的示例可能会进行四舍五入(1 非常接近 0.98),因此请注意“注意向量的大小是不同的,如果不是这样的话会更有用由于四舍五入,因此旋转矩阵定义不明确”。
  • @Wolfie 我明白了我糟糕的用词是如何导致混乱的。不幸的是,我似乎无法再编辑我的 cmets,所以我删除了它们。尽管 0.98 与 1 的差异足够大,但除非有很多步骤,否则它不可能是由于四舍五入造成的。唯一的可能是最后一个元素实际上是 0.9999。
  • 还有相关的和获取实际旋转矩阵的解决方案:math.stackexchange.com/questions/180418/…

标签: matlab matrix rotation


【解决方案1】:

你的问题可以定义为一个线性方程,比如说,

y = mx

其中,yx 是矩阵。查找m

解决方案:

m = x\y or m = mldivide(x,y)

注意backslash。这不是 Wolfie 在他的回答中提到的正斜杠 /。详情见https://www.mathworks.com/help/matlab/ref/mldivide.html

其他详情:

如果x 是奇异矩阵,请使用pinv。参考https://www.mathworks.com/help/matlab/ref/pinv.html

【讨论】:

    【解决方案2】:

    这是一个简单的重新排列

    % [0;0;1] = R * [0.0023;0.0019;0.9899];
    % So ...
    % [0;0;1] / [0.0023;0.0019;0.9899] = R
    % This is a valid MATLAB command
    
    R = [0;0;1] / [0.0023;0.0019;0.9899];
    >> R =
        [ 0    0    0
          0    0    0
          0    0    1.0102 ]
    

    我们可以验证这个结果

    R * [0.0023;0.0019;0.9899]
    >> ans =
        [0; 0; 1]
    

    【讨论】:

    • 必须指出, / 运算符在这种定义不明确的情况下尽可能多地放置零。旋转矩阵还有无数其他解决方案。 (这在最严格的意义上并不存在,因为示例中没有保留向量范数)。
    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多