【问题标题】:Searching mathematical algorithm for vector calculation搜索向量计算的数学算法
【发布时间】:2020-01-13 09:05:47
【问题描述】:

我已经给出了这样的 3D 对象的方向:

方向1:

X 向量:

X_X: 1

X_Y: 0

X_Z: 0

Y 向量:

Y_X: 0

Y_Y: 1

Y_Z:0

Z 向量:

Z_X: 0

Z_Y: 0

Z_Z: 1

方向2:

X 向量:

X_X: 0

X_Y: 0

X_Z: 1

Y 向量:

Y_X: 0

Y_Y:-1

Y_Z:0

Z 向量:

Z_X: 1

Z_Y: 0

Z_Z: 0

看起来像这样(左侧是Direction1,右侧是Direction2):

我现在必须过滤掉从direction1到direction2的旋转信息。 有算法 f.e.它计算vector1到vector 2的旋转,但这里我有3个向量,我不知道如何计算这里的欧拉旋转角。

我想过将 3 个向量总结为 1 个,f.e.图片 1 将是 (1,1,1),而 pic2 将是 (1,-1,1),但这里的问题是信息,哪个轴指向哪个方向会丢失。 有人有想法吗?

【问题讨论】:

    标签: math rotation transform


    【解决方案1】:

    您似乎想找到将一个非共面向量三元组转换为另一个三元组的仿射变换。
    制作矩阵 AB 以及未知的旋转矩阵 M
    这里像x1 y1 z1 这样的列向量是你的X_X X_Y X_Z 等等。

     M * A = B
    
        |x1 x2 x3 0|     |x1` x2` x3` 0|
    M * |y1 y2 y3 0| =   |y1` y2` y3` 0|
        |z1 z2 z3 0|     |z1` z2` z3` 0| 
        |1  1  1  1|     |1   1   1   1| 
    

    找到A的逆矩阵InvA,并在两边乘以IA

    M * A * InvA = B * InvA
    M * |1 |= B * InvA
    M = B * InvA
    

    现在你有了变换向量所需的矩阵M

    旋转约 5,0,0

          |1 0 0 -5|        |1 0 0 5|
    M' =  |0 1 0  0| * M *  |0 1 0 0|
          |0 0 1  0|        |0 0 1 0|
          |0 0 0  1|        |0 0 0 1|
    

    【讨论】:

    • 所以通过将输出矩阵与逆输入矩阵相乘,我得到了我的“变换矩阵”,对吗?我的程序中有这个函数: .setRotationFromMatrix ( m : Matrix4 ) : null m -- 通过矩阵的旋转分量旋转四元数。如果 m 是 B*InvA 计算的 M,这会起作用吗?
    • 对于一般的 4x4 矩阵 4x4,您需要扩展组合矩阵 - 我会更正它们。我怀疑四元数 - 四元数本身描述了旋转(四元数方法是旋转矩阵的替代方法)。也许setRotationFromMatrix 不会旋转,而是创建与矩阵具有相似旋转的四元数。
    • 我会对您的解决方案进行编程,希望它能够奏效。谢谢你。如果它有效或者我需要你的更多帮助,我会在这里写信。如果我不知道的话,如果你能再次帮助我,我会很高兴
    • 编辑:我将尝试使用这个函数: R.extractRotation ( m : Matrix4 ) : this 将提供的矩阵 m 的旋转分量提取到这个矩阵的旋转分量中。我是否必须将我的对象的矩阵与这个 extractRotation 输出相乘? M*R?
    • 希望你能用M本身做旋转
    猜你喜欢
    • 2012-03-13
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 2020-02-27
    • 2015-09-18
    相关资源
    最近更新 更多