Vector3中normalized和Normalize()函数的区别

时间:2020-03-10 发布者: 访问量:7018

1.Vector3.normalized

      unity里对它的解释是,如下图

Vector3中normalized和Normalize()函数的区别_第1张图片


2.Vector3.Normalize

      unity里对它的解释是,如下图

Vector3中normalized和Normalize()函数的区别_第2张图片


它们的区别和共同点是:

共同点:实现规范化,让一个向量保持相同的方向,但它的长度为1.0,如果这个向量太小而不能被规范化,一个零向量将会被返回。

不同点:Vector3.normalized的作特点是当前向量是不改变的并且返回一个新的规范化的向量;Vector3.Normalize的特点是改变当前向量,也就是当前向量长度是1


下面来举例说明:


      Vector3.normalized的特点是什么意思呢?

打开unity,创建脚本,主体内容如下

{
                Vector3 temp = new Vector3(3f, 4f, 5f);
                Vector3 temp1 = temp.normalized;

                Debug.Log(temp.ToString());
                Debug.Log(temp1.ToString());
}
输出如下图:

经过计算temp1长度的平方=0.4*0.4+0.6*0.6+0.7*0.7=1.22,开根号后是1.104536102,这个数据接近于1,数据都是有误差的嘛,不等于1是正常的。由图可知,经过运算后temp,temp1的值变为

temp=(3.0,4.0,5.0),也就是不变

temp1=(0.4,0.6,0.7)


     你可能还不理解,再看看Vector3.Normalize()这个函数,代码如下,

{
                Vector3 temp = new Vector3(3f, 4f, 5f);
                Debug.Log(temp.ToString());

                temp.Normalize();
                Debug.Log(temp.ToString());
}
输出如下图,


经过Normalize()函数后,temp的值改变了,变为了(0.4,0.6,0.7)。


经过上面的例子你应该明白它们的区别了吧。


大家还记得它们的共同点里有一句话“如果这个向量太小而不能被规范化,一个零向量将会被返回”,这句话我也举一个例子,

代码如下,因为这是共同点,两个都是一个情况,所以就以Vector3.Normalize()函数为例吧,

            {
                Vector3 temp = new Vector3(0.00000000001f, 0.000000000004f, 0.000000000005f);
                Debug.Log(temp.ToString());

                temp.Normalize();
                Debug.Log(temp.ToString());
            }
它的输出情况是

Vector3中normalized和Normalize()函数的区别_第3张图片

好了,介绍完毕。

发布于
  用户评论
    生活编程