3dmax中的物体的方向是用一个四元数来记录的

 --如果你创建一个BOX 

--并选择它
--在MAXScript Listener 里输入:
--
aBox=$box01
--$Box:Box01 @ [-23.316830,-24.494915,0.000000]
a.rotation
--(quat 0 0 0 1)
--
--上面返回一个单位化的四元数(quat x y z w)
aBox.rotation.x
--0.0
aBox.rotation.y
--0.0
aBox.rotation.z
--0.0
aBox.rotation.w
--1.0
--
--四元数可以标记为quat(V,a),V是一个向量,a是绕V旋转
--的标量,也可以表示为quat(Vx,Vy,Vz,a),VxVyVz是分量
--但这里的x y z w 与V,a 的关系是:
--Vx*sin(a/2) Vy*sin(a/2) Vz*sin(a/2) cos(a/2)
--    x            y          z          w
--
--单位化的四元数quat  x*x + y*y + z*z + w*w=1
--单位向量V           Vx*Vx + Vy*Vy + Vz*Vz=1
--
--我们可以把问题简单化只考虑绕一个坐标轴的旋转
--假设只绕Z轴旋转V=(0,0,1),即Vx=0;Vy=0
--四元数简化为:quat(0  , 0 ,  sin(a/2), cos(a/2))
--X,Y同理
--这样就可以把四元数转换成绕三个轴的角度表示
--接着上面的输入:
select aBox
--OK
rotate $ (angleaxis 45 [0,0,1])
--OK aBox绕Z轴旋转了45度
abox.rotation
--(quat 0 0 0.382683 0.92388)
--返回新的四元数
--可以简单计算一下
angle_z=2*asin(aBox.rotation.z)
-- 45.0
angle_z=2*acos(aBox.rotation.z)
-- 45.0 返回值相同
--
rotate $ (angleaxis -90 [0,0,1])
--OK (绕Z轴反方向转90度)
angle_z=2*asin(aBox.rotation.z)
-- -45.0
angle_z=2*acos(aBox.rotation.z)
-- 45.0  (我们得到两个不同的值)
--原因很简单我不想解释,需要做的是判断两个值哪个是真
--cos(45)=cos(-45)所以这里要取-45值,这里必须得
--验证这样才能返回我们需要的取值范围[-180,180]
--这样我就得到了一个绕Z轴旋转的角度或者是X Y 轴
--
--如果绕多个轴旋转(其实是绕通过原点的任意轴旋转)
--Vx*sin(a/2) Vy*sin(a/2) Vz*sin(a/2) cos(a/2)
--如果通过上面的方法计算2*acos(a/2)得到的是绕任意轴旋转的角度
--不是绕坐标轴旋转的角度





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值