确定3D空间中直线的角度

时间:2015-01-20 16:42:54

标签: vb.net math line

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

以下是我的3D环境中的线条图片(I' m中的线条以红色圈出):

enter image description here

现在设置为70度角。

1 个答案:

答案 0 :(得分:5)

您需要2 rays to define an angle

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

因此,当我们谈到矢量和平面之间的角度时,我们采用的是最小值。

此值也是π/ 2 - 矢量与平面法线的矢量之间的角度。您可以阅读更多关于它的全部on this site

使用v您的向量(因此v.x = end.x - start.xyz的同义词),n平面的法线和a你正在寻找的角度,我们从标量产品的定义中得知:

<v,n> = ||v|| * ||n|| * cos(π/2 - a)

我们知道cos(π/2 - a) = sin(a),而z=0平面的法线只是向量n = (0, 0, 1)。因此,标量乘积v.x * n.x + v.y * n.y + v.z * n.z和n ||n|| = 1的范数都可以简化很多。我们得到以下表达式:

sin(a) = v.z / ||v||

最后,通过取正弦的互反性并明确v的范数:

a = Asin(v.z / sqrt( v.x*v.x + v.y*v.y + v.z*v.z ))

根据this documentation,您的System.Math类中存在Asin函数。但是,它确实以弧度为单位返回值:

  

返回值   键入:System.Double   以弧度测量的角度θ,使得-π/2≤θ≤π/ 2   -要么-   如果d 1或d等于NaN。

幸运the same System.Math class contains the value of π,以便您可以进行转换:

a *= 180 / Math.PI