标签:转换 轴角 vAngle 四元 cosp sin Math
轴角:
轴角表示方式:(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)
三维向量叉乘公式:
点乘公式: 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
标签:转换,轴角,vAngle,四元,cosp,sin,Math 来源: https://www.cnblogs.com/FormerWhite/p/15211131.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。