zoukankan      html  css  js  c++  java
  • 轴角、四元数转换

    轴角:

    轴角表示方式:(x,y,z,thead)
    从一个坐标(x,y,z)经旋转a角度后得到(x1,y1,z1)

    设两个坐标点a(x1,y1,z1) b(x2,y2,z2)

    轴角计算方法:
    1、叉乘-->点乘--->反正切求角度

    二维向量叉乘公式:a(x1,y1),b(x2,y2),则a×b=(x1y2-x2y1)
    三维向量叉乘公式:
    

    Snipaste_2021-08-31_16-45-46.png

    点乘公式: a.b = x1x1+y2y2+z3z3
    

    2.Math.atn2(y,x) 返回的是一个弧度 y:y2-y1 x:x2-x1

    四元数:

    四元数都是由实数加上三个虚数单位 i、j和k 组成,而且它们有如下的关系:
    i² = j² = k² = -1, iº = jº = kº = 1
    每个四元数都是 1、i、j 和 k 的线性组合,即是四元数一般可表示为a + bi+ cj + dk,其中a、b、c 、d是实数。

    四元数的基本数学方程为 :

    q = cos (a/2) + i(x * sin(a/2)) + j(y * sin(a/2)) + k(z * sin(a/2))
    //其中a表示旋转角度,(x,y,z)表示旋转轴
    

    轴角---> 四元数

    四元数与轴角转换公式:q=((x,y,x)sin(a/2),cos(a/2))

    //举例:点(0,0,23.455)绕z轴旋转u度 u=45 即单位向量为[0,0,1] 非0即为1
    //     角度写法 :vAngle = 45/2*Matn.PI/180
    //     弧度写法 :vAngle = (这里是Math.atn2(y,x)返回的弧度)/2
                                    结果如下:
        q={
            x:0*Math.sin(vAngle),  //0
            y:0*Math.sin(vAngle),  //0
            z:1*Math.sin(vAngle),  //0.3826834323650898
            w:Math.cos(vAngle)     //0.9238795325112867
        }
    

    四元数--->轴角

      let angle = 0;
      let siny_cosp = 2 * (q.w * q.z + q.x * q.y);
      let cosy_cosp = 1 -2 * (q.y * q.y + q.z * q.z);
      let radian = Math.atan2(siny_cosp, cosy_cosp); //求出弧度
      angle = (180 / Math.PI) * radian; //转化角度
      //结果:angle=45
    
  • 相关阅读:
    二级python两种不同处理方式统计字频
    二级python提纯文件中的原文(去掉小括号,注释等)
    二级python处理文件并计数
    二级python对字频统计
    matlab实现跨表自动对应标题填写数据
    用matlab对excel中数据选择性染色
    最短路径查找—Dijkstra算法
    BP实现函数拟合
    BP应用案例
    Matlab实现BP神经网络预测(附实例数据及代码)
  • 原文地址:https://www.cnblogs.com/FormerWhite/p/15211131.html
Copyright © 2011-2022 走看看