分析一下关于Vector的使用心得【转】

原文出自:unity3d贴吧-醉卧沙场_O



开篇废话:最新在写脚本时遇到了很多Vector的数学计算,于是恶补了一下Vector的知识和使用技巧,学完后感觉受益匪浅,本着知识无国界,技术无隐私的原则,特与大家分享。若有不足还请指正。


入题:
本文用Vector3来做介绍,因为使用最广,其他的诸如Vector2等等都是一样的道理,脚本使用的是C#

向量在Unity的含义
在Unity中最常用的类就是Vector3这个类了,简单的说是向量,实际上远非如此。在Unity中Vector3有一下几种含义
1. 三个数字打一包:
这种用法没有几何意义,就是三个数,没其他的。比如欧拉角,缩放比例,都是这样的用法,这种情况不能看成是向量。所以对这种用法做向量运算的话结果可能会很奇怪。

2. 空间位置的“点”:
关键词是“点”,这种情况用的最多的是transform.Position,它表示的是位置,与x,y,z坐标对应,在某些计算下有集合含义,可以做运算。

3. 空间位置的“方向线段”:
方向线段这才是向量真正的姿态,一个向量有两个含义:大小和方向,所以向量可以拆分成两部分来看,大小就是模(|v|),方向就是标准化(Vn),例如描述一个朝Vn方向大小为|v|的速度。
这里有一个隐藏属性,就是从原点(0,0,0)出发。两点一线。
所以向量可以分解为v=|v|* Vn


向量和常数(i)的运算:
不能加减。
iV=Vi=(ix,iy,iz) 满足交换律。代表把线拉长多少倍
V/i = (x/i, y/i, z/i) 注意 i/V是不行的。代表把线缩小多少倍


向量的常用运算和意义:
1. 向量的长度(模|v|)
注意只有当做”方向线段“的时候模才有意义,简单的说就是这条线有多长,就是你用尺子量出来的数据。

公式: 
脚本:v.magnitude,v.sqrMagnitude

sqrMagnitude代表模的平方,为啥会有这么个东西呢?其实仅仅是因为平方根的计算会很耗时,sqrMagnitude的效率会高很多,例如在比较模的大小这类的问题上,比较sqrMagnitude的大小就足够了。


2. 向量的标准化(单位向量 Vn)
同样,是对“方向线段”的描述, 意思是把这条线拉长或者缩短,让他的模等于1,他最大的作用就是表示方向,判断两个向量是不是一个方向,判断Vn就可以了。

公式:
脚本:v.normalized, v.Normalize()
使用技巧:如要把任意V长度变成5,直接5*Vn就可以了

v.normalized是计算自己标准后的向量,然后返回别处用,自己的值不会改变。
v.Normalize()是把自己标准化,自己的值会改变。


3. 向量相加(Va+Vb)
看做“方向线段”可以用来表示路径,速度等的叠加。
例如:走到a点再走到b点的结果。先以速度a出发再受到速度b的结果。

公式:
脚本: 直接写Va+Vb


4. 向量相减(Va-Vb)
看做“点”时表示:将两点连成方向线段,方向由b指向a。如此一来要计算两点之间的距离和相对方向就很容易了,距离是|Va-Vb|, 相对方向是Va-Vb再标准化。这个很实用
看做“方向线段”可以用来求速度,路径等的逆运算,回滚等。

公式:
脚本: 直接写Va-Vb

5. 向量点乘(Va.Vb)
具体含义比较模糊代表,在物理学中,已知力与位移,点乘的结果为功, 看做“方向线段”可以用来求夹角,个人感觉这是最有用的地方。

公式: 注意结果是一个常数
脚本: Vector3.Dot(va, vb)
实用技巧:,可以直接得到夹角,比较好的是Unity提供了这个方法Vector3.Angle(Va, Vb)。

6. 向量叉乘(Va x Vb)
这个感觉很少用,我也几乎没用过,坐等大神来解答

脚本: Vector3. Cross (va, vb)


7. 投影(Vp)
V在轴Vb上的影子, 这个概念不好说清楚,可以去问度娘,可以用来做向量的切割,比如要限制物体的运动方向时可以使用投影。

公式:
脚本: Vector3.Project(V, Vb);

8. 反射(Vr)
V对于法线N的反射,这个最有意思了,想想一下光反射或者桌球反弹,就是那个概念。可以用于模拟一下物理碰撞。
公式: 注意此处N需要标准化
脚本: Vector3. Reflect (V, N);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值