Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math 确定向量3沿另一个向量3的距离_Math_Unity3d_Geometry - Fatal编程技术网

Math 确定向量3沿另一个向量3的距离

Math 确定向量3沿另一个向量3的距离,math,unity3d,geometry,Math,Unity3d,Geometry,我有两个3D向量。(具有X、Y和Z浮动值的对象) 在下面的图表中,我想确定绿线的长度。 这是向量1与向量2之间的距离。或者,从原点到向量1上直线末端的距离,该直线与向量1的距离为90’,并穿过向量2末端的点 我在Unity3D中做这项工作,因此我可以访问许多帮助器方法,使我能够非常轻松地获得矢量3的长度等等。我不确定,但我认为这是您想要的 Vector3 distance = Vector3.Lerp(Vector3.zero, vector_1, vector_2.sqrMagnitude

我有两个3D向量。(具有X、Y和Z浮动值的对象)

在下面的图表中,我想确定绿线的长度。 这是向量1与向量2之间的距离。或者,从原点到向量1上直线末端的距离,该直线与向量1的距离为90’,并穿过向量2末端的点


我在Unity3D中做这项工作,因此我可以访问许多帮助器方法,使我能够非常轻松地获得矢量3的长度等等。

我不确定,但我认为这是您想要的

Vector3 distance = Vector3.Lerp(Vector3.zero, vector_1, vector_2.sqrMagnitude / vector_1.sqrMagnitude);


我不确定,但我想这就是你想要的

Vector3 distance = Vector3.Lerp(Vector3.zero, vector_1, vector_2.sqrMagnitude / vector_1.sqrMagnitude);


这是向量2向向量1方向的投影。找到它的最简单方法(我认为)是使用标量积

D=|V2|*DotProduct(V2V1)/(|V2。*|V1)=DotProduct(V2V1)/|V1|


其中|V1|是V1向量的长度

这是向量2向向量1方向的投影。找到它的最简单方法(我认为)是使用标量积

D=|V2|*DotProduct(V2V1)/(|V2。*|V1)=DotProduct(V2V1)/|V1|


式中|V1|是V1向量的长度

norm(v2)*cos(angle(v1,v2))
自从

cos(angle(v1,v2))=abs(dot(v1,v2))/norm(v1)/norm(v2)
最后的公式是

abs(dot(v1,v2))/norm(v1)

也可以这样说

e1 = v1/norm(v1)
是沿
v1
方向的单位向量,绿色向量为

dot(e1,v2)*e1

得出相同的长度公式。

长度明显

norm(v2)*cos(angle(v1,v2))
自从

cos(angle(v1,v2))=abs(dot(v1,v2))/norm(v1)/norm(v2)
最后的公式是

abs(dot(v1,v2))/norm(v1)

也可以这样说

e1 = v1/norm(v1)
是沿
v1
方向的单位向量,绿色向量为

dot(e1,v2)*e1

产生相同的长度公式。

只需查看Vector3的文档即可。您很快就会看到它包含了诸如
Project
(以及类似的函数)之类的函数,其中一个函数正是您想要的。纯FTR注意,要知道您的图表在3D空间中指向何处是绝对不可能的:)非常感谢!这是非常有用的,我想我对Vector3很熟悉,但我想我一直没有注意到这一点(尽管没有必要粗鲁:/)而且你的第二个评论非常正确,但也没关系,我寻求的答案应该适用于任何安排,唯一重要的是黑线垂直于红线,只需查看Vector3的文档即可。您很快就会看到它包含了诸如
Project
(以及类似的函数)之类的函数,其中一个函数正是您想要的。纯FTR注意,要知道您的图表在3D空间中指向何处是绝对不可能的:)非常感谢!这是非常有用的,我以为我熟悉Vector3,但我想我一直没有注意到这一点(虽然没有必要粗鲁:/)你的第二个评论也很正确,但也没关系,我寻求的答案应该适用于任何安排,唯一重要的是黑线垂直于红色的oneHi LutzL。这在数学上是令人钦佩的,但请注意,由于这是在游戏引擎(Unity3D)中实现的,因此解决方案立即可用。问题是关于Unity中的
Vector3
数据类型。OP只需检查doco中的
Vector3
,并立即找到解决方案。好的,那就是
(Vector3.Project(v2,v1))。幅值
。然而,
abs(Vector3.Dot(v1,v2))/v1.magnity
所涉及的操作较少,因为没有构建中间的临时
Vector3
实例。这在数学上是令人钦佩的,但请注意,由于这是在游戏引擎(Unity3D)中实现的,因此解决方案立即可用。问题是关于Unity中的
Vector3
数据类型。OP只需检查doco中的
Vector3
,并立即找到解决方案。好的,那就是
(Vector3.Project(v2,v1))。幅值
。然而,
abs(Vector3.Dot(v1,v2))/v1.magnity
所涉及的操作较少,因为没有构建中间的临时
Vector3
实例。