×

quaternion

quaternion(Quaternion 中的W是什么意思(unity中的四元数))

admin admin 发表于2023-03-05 17:35:06 浏览32 评论0

抢沙发发表评论

本文目录

Quaternion 中的W是什么意思(unity中的四元数)


Quaternion 是四元数,平时说有x,y,z,w这四个值,但是这里的xyz并非是三个角度值,unity中在检视面板显示的是欧拉角,和这里的四元数是两个概念,这里的x,y,z,w只有一起使用时才有意义,也不需要关心每个值代表什么,在unity中知道Quaternion 有关的几个重要函数,足够了

quaternion和transform在实现Gameobject的旋转上有什么区别


优点:
1、不知道旋转轴可以是任意向量算不算。至少我觉得这个用起来还挺方便。如果使用别人的封装大概感受不到?
缺点:
1、实际使用旋转的时候只需要向量加每个轴的欧拉角角度分量,但是矩阵是4x4的,浪费。
2、由于是4x4的,计算时候增加了额外计算量和空间开销。
四元数旋转:
优点:
1、避免欧拉旋转的万向锁。
2、只需要4维的四元数就可以完成旋转,一些情况下,比如旋转自身,比transform效率高。
3、可以提供一些插值运算。常用的大概是平滑插值。
缺点:
1、理解比较费劲。不过别人封装的时候一般会按欧拉旋转封装。
2、旋转向量需要通过原点。自己做封装有几步换算。

unity3d 的Quaternion.identity和transform.rotation区别是什么


unity3d 的Quaternion.identity和transform.rotation区别为:性质不同、旋转角度不同、值大小不同。

一、性质不同

1、Quaternion.identity:Quaternion.identity是值类型。

2、transform.rotation:transform.rotation属性变量。

二、旋转角度不同

1、Quaternion.identity:Quaternion.identity的旋转角度固定,声明后不可再赋值。

2、transform.rotation:transform.rotation的旋转角度不固定,声明后可以再赋值。

三、值大小不同

1、Quaternion.identity:Quaternion.identity的值大小必须大于0度,超过360度,按倍数去掉360度旋转。

2、transform.rotation:transform.rotation的值大小可以小于0度,按倍数加上360度旋转。


OGRE中如何通过一个方向向量Vector3来设置摄像机的Quaternion就是将Vector3转换成四元数


Quaternion AnglesToQuaternion(const Vector3& Degrees)
{
Matrix3 mat3;
mat3.FromEulerAnglesXYZ(Degree(Degrees.x), Degree(Degrees.y), Degree(Degrees.z));
Quaternion tmp;
tmp.FromRotationMatrix(mat3);
return tmp;
}

什么是齐次空间


就这个上下文来看俺猜应该指的是投射空间(Projective Space)?就是(R^4-{0})/~,其中~的等价关系定义成向量A~向量B当且仅当它们相差一个标量(i.e. A=c*B for c\in R)
简单来说,n维向量的齐次空间是n+1维的。
在OpenVG 这种二维矢量图形加速接口中,规定二维齐次空间坐标系就是一个三维空间。把N维映射到N+1维就是为了能够在高纬度做变换然后在映射到低纬度空间上。
比如,在OpenVG中,要变换一个二维图形,比如是个二维的字母,首先把他变换到三维空间,然后做各种旋转或者拉伸,然后在映射到二维空间上,从而使得二维图像也可以有一些简单的三维特效。
最简单的想法是:在有点和向量混合的情况下,给定一个(x, y, z),我们不知道这个是向量还是点,所以引入齐次坐标(所谓齐次坐标就是用N+1表示N维量),最后一维用1就是点,0就是向量。
在《《Focus on 3D models》》中,四元数主要是用来做rotation的。用四元数在此书中说有三点好处:
a, 能解决Gimbal Lock;
b, 能平滑的进行插值;
c,处理旋转比矩阵需要的空间小(旋转还可以用矩阵来表示,需要9个slot);
注意:四元数只有在是unit length的时候才能表示旋转。
在3D中我们常用4x4的矩阵,来配合3维空间的点的缩放、旋转、平移运算。因此是3维运算,但是用了4x4,所以我们称之为Homogeneous Matrix,更精确的说是Homogeneous Transformation Matrix。
有网友总结的齐次坐标的如下,个人觉得很容易理解,为防止链接失效,原文拷贝如下(下划线所示):
原文地址:

Quaternion(四元数)类中的属性和方法是什么含义主要用在什么功能中


当实例化游戏物体时需要传一个参数,即所产生物体是否发生旋转,不旋转时就使用Quaternion.Identity;如果要计算一个物体的正前方到目标位置要旋转的角度时,使用Quaternion.LookRotation(参数)方法,然后再用Quaternion.Lerp(参数)方法让物体进行旋转

quaternion.euler怎么计算


《pre t=“code“ l=“csharp“》public class ro : MonoBehaviour
{
void Update()
{
Quaternion target=Quaternion.Euler(0,90,0);
transform.rotation=Quaternion.RotateTowards(transform.rotation,target,2.0f);
}
}将此脚本挂到Cube上

什么是虚数


在数学里,将平方是负数的数定义为纯虚数。所有的虚数都是复数。这种数有一个专门的符号“i”(imaginary),它称为虚数单位。定义为i^2=-1。但是虚数是没有算术根这一说的,所以√(-1)=±i。对于z=a+bi,也可以表示为e的iA次方的形式,其中e是常数,i为虚数单位,A为虚数的幅角,即可表示为z=cosA+isinA.
  不过在电子等行业中,因为i通常用来表示电流,所以虚数单位用j来表示。
  虚数没有正负可言。不是实数的复数,即使是纯虚数,也不能比较大小。1<2是对的,但1+i<2+i是错的。
  我们可以在平面直角坐标系中画出虚数系统。如果利用横轴表示全体实数,那么纵轴即可表示虚数。整个平面上每一点对应着一个复数,称为复平面。横轴和纵轴也改称为实轴和虚轴。
  “虚数”这个名词是17世纪著名数学家、哲学家笛卡尔创制,因为当时的观念认为这是真实不存在的数字。后来发现虚数可对应平面上的纵轴,与对应平面上横轴的实数同样真实。
虚数 - i的性质
的高次方会不断作以下的循环:
i1 = i
i2 = - 1
i3 = - i
i4 = 1
i5 = i
i6 = - 1...
由于虚数特殊的运算规则,出现了下列算式
i1 + i2 + i3 + i4 = 0
由于虚数特殊的运算规则,出现了符号 ω
ω2 + ω + 1 = 0
ω3 = 1的简式。
如果再将这个概念扩展开去,就可以组成四元数(Quaternion)、八元数(Octonion)等特殊数学范畴。
而这些虚数都是不能比较的:
1 《 2→成立 但 1 + i 《 2 + i却不成立
因为这些虚数并不是真正存在的。
证明:
如果i 》 0,则 − 1 》 0,矛盾。
如果i = 0,则 − 1 = 0,矛盾。
如果i 《 0,则 − 1 》 0,矛盾。
由此可知虚数并不存在,
所以无法用大小来比较。

Unity3D的Quaternion怎么用通俗点


《pre t=“code“ l=“csharp“》public class ro : MonoBehaviour
{
void Update()
{
Quaternion target=Quaternion.Euler(0,90,0);
transform.rotation=Quaternion.RotateTowards(transform.rotation,target,2.0f);
}
}将此脚本挂到Cube上