Vb.net 确定三维空间中直线的角度

Vb.net 确定三维空间中直线的角度,vb.net,math,line,Vb.net,Math,Line,我在空间中有一条直线,有一个起点和终点(x,y,z),我试图得到这个向量和由z=0定义的平面之间的角度。我正在使用VB.NET 这是我的3d环境中的线条图片(我感兴趣的线条用红色圈起): 它现在设置为70度角。您需要 如果需要向量和平面之间的角度,则该角度是为该平面中的任何向量定义的。然而,只有一个最小值,即向量与其在所述平面上的投影之间的角度 因此,当我们谈到向量和平面之间的角度时,这个最小值就是我们所取的 这个值也是π/2——向量和垂直于平面的向量之间的角度。你可以阅读更多关于它的内容 用

我在空间中有一条直线,有一个起点和终点(x,y,z),我试图得到这个向量和由
z=0
定义的平面之间的角度。我正在使用VB.NET

这是我的3d环境中的线条图片(我感兴趣的线条用红色圈起):

它现在设置为70度角。

您需要

如果需要向量和平面之间的角度,则该角度是为该平面中的任何向量定义的。然而,只有一个最小值,即向量与其在所述平面上的投影之间的角度

因此,当我们谈到向量和平面之间的角度时,这个最小值就是我们所取的

这个值也是π/2——向量和垂直于平面的向量之间的角度。你可以阅读更多关于它的内容

v
你的向量(因此
v.x=end.x-start.x
和idem表示
y
z
),
n
平面的法线和
a
你寻找的角度,我们从标量积的定义中知道:

<v,n> = ||v|| * ||n|| * cos(π/2 - a)
因此,最后,通过取正弦的倒数并明确
v
的范数,公式如下:

a = Asin(v.z / sqrt( v.x*v.x + v.y*v.y + v.z*v.z ))
根据
Asin
函数存在于系统中。数学类。但是,它会返回弧度值:

返回值 类型:系统。双 角θ,以弧度为单位测量的角,即-π/2≤ θ ≤ π/2 -或- 如果d<-1或d>1或d等于NaN,则为NaN

幸运的是,您可以进行转换:

a *= 180 / Math.PI
你需要

如果需要向量和平面之间的角度,则该角度是为该平面中的任何向量定义的。然而,只有一个最小值,即向量与其在所述平面上的投影之间的角度

因此,当我们谈到向量和平面之间的角度时,这个最小值就是我们所取的

这个值也是π/2——向量和垂直于平面的向量之间的角度。你可以阅读更多关于它的内容

v
你的向量(因此
v.x=end.x-start.x
和idem表示
y
z
),
n
平面的法线和
a
你寻找的角度,我们从标量积的定义中知道:

<v,n> = ||v|| * ||n|| * cos(π/2 - a)
因此,最后,通过取正弦的倒数并明确
v
的范数,公式如下:

a = Asin(v.z / sqrt( v.x*v.x + v.y*v.y + v.z*v.z ))
根据
Asin
函数存在于系统中。数学类。但是,它会返回弧度值:

返回值 类型:系统。双 角θ,以弧度为单位测量的角,即-π/2≤ θ ≤ π/2 -或- 如果d<-1或d>1或d等于NaN,则为NaN

幸运的是,您可以进行转换:

a *= 180 / Math.PI

我想人们通常用叉积来求两个向量之间的角度。还是Dot产品?我打赌这些人肯定知道;-)这个问题的答案不是问题的第一部分吗?我正在尝试获取解决这个问题的代码(可能是利用.NET的Math.feature),同时,这在3D环境中只有一行,而不是两行@Bjørn RogerKringsjå我很确定我不记得数学课上的任何内容,但在3D空间中,你不需要测量相对于其他直线的角度吗?否则,视角度是否会随观察点的不同而变化?(现在,我伸出食指,转动我的手,观察角度的变化)。@Cimbali基本上,我绕的线是以70度的角度站着的。我想根据我拥有的两点(起点和终点)得到该值。我假设需要的第二个对象是z=0平面,所以是的,这就是我要寻找的(如果结果是正确的)谢谢你的评论,我认为人们通常使用叉积来找到两个向量之间的角度。还是Dot产品?我打赌这些人肯定知道;-)这个问题的答案不是问题的第一部分吗?我正在尝试获取解决这个问题的代码(可能是利用.NET的Math.feature),同时,这在3D环境中只有一行,而不是两行@Bjørn RogerKringsjå我很确定我不记得数学课上的任何内容,但在3D空间中,你不需要测量相对于其他直线的角度吗?否则,视角度是否会随观察点的不同而变化?(现在,我伸出食指,转动我的手,观察角度的变化)。@Cimbali基本上,我绕的线是以70度的角度站着的。我想根据我拥有的两点(起点和终点)得到该值。我假设需要的第二个对象是z=0平面,所以是的,这就是我要寻找的(如果结果是正确的),谢谢你的评论