Vector3.Projection是什么意思?

时间:2017-02-11 19:01:27

标签: c# unity3d

投影在统一中意味着什么?

我有以下代码,但我不知道他们的概念可以有人帮助我并告诉我这些行是什么意思吗?

Vector3 normal = (end_line.position - start_line.position).normalized;
Vector3 pos = start_line.position + Vector3.Project (target.position-start_line.position,normal);

1 个答案:

答案 0 :(得分:4)

  

Vector3 normal =(end_line.position - start_line.position).normalized;

normal是直线(矢量)的方向。它被规范化,使其大小等于1.如果删除.normalized部分,它将代表行(向量)本身。

  

Vector3 pos = start_line.position + Vector3.Project   (target.position-start_line.position,正常);

让我们分解一下:

target.position-start_line.position是另一个向量,从start_line开始,到target结束

Vector3.Project(target.position-start_line.position,normal)将此向量投射到normal上。如果你认为normal是地面(可能是旋转世界)而且它是中午(12:00)那么结果向量就是你所看到的target.position-start_line.position的阴影所引起的太阳并投射到地面上。

如果您将该向量移动到start_line,则会得到pos

Vector3.Project究竟是什么

p = Vector3.Project(a,n)

中的

简单;向a方向绘制了多少向量n

a是投射到n的源矢量。

n是一个归一化向量,它代表一个轴。 我不知道归一化向量(0,1)和非归一化向量(0,2)是否给出相同的结果。

p是通过将a投影到n而创建的矢量。

您始终可以假设na开始的地方开始。由于n是一个轴,你可以假设它是一条无穷无尽的线(从-inf到+ inf)。因此,如果您将a移动到n轴上的零点(n向量的起点),您将得到以下内容:

enter image description here

vector = a,onNormal = n,Projection = p

  • 如果a.normalized = np = a
  • 如果a is perpendicular to np = Vector3.zero
  • p.magnitude <= a.magnitude因为同样的原因,阴影不能长于中午来源。

在图中,normal是(0,1,0),但在这种特殊情况下,您也可以使用(0,a.y,0)而不是项目。