如果我有一个向量(0,0,9)并且我想将它投影到向量上(0,0.7,0.7),那么不应该给我一个向量(0,9,9)。
我使用以下公式
Vector3.Dot (vector, normal) * normal.magnitude * normal;
返回(0,0.45,0.45)。我错过了什么,不是返回的矢量z假设在与投影矢量相同的z位置结束。喜欢这个
答案 0 :(得分:0)
将矢量投影到另一个矢量时,结果的幅度始终小于或等于原始矢量的幅度。
给定一个标准化的向量 u ,将 v 投影到 u 上,公式如下:
proj u v = << em> u , v > u
或者,在代码中,
Vector3.Dot(vector, normal) * normal
将(0,0,9)投影到(0,√1/ 2,√1/ 2)的结果为(0,4.5,4.5)。
请注意,normal.magnitude
始终为1,除非normal
不是“正常”(在这种情况下,您将变量命名为错误);如果它不正常,你需要除以平方幅度,而不是乘以。
Vector3.Dot(vector, direction) * direction
* (1.0 / direction.magnitude_squared)