确定 3D 直线的角度 space
Determine angle of a straight line in 3D space
我在 space 中有一条直线,起点和终点 (x,y,z) 并且我试图获得此矢量与 z=0
定义的平面之间的角度.我正在使用 VB.NET
这是我的 3d 环境中的线条图片(我感兴趣的线条以红色圈出):
现在设置为 70 度角。
如果您需要矢量与平面之间的角度,则为该平面中的任何矢量定义角度。但是,只有一个最小值,即矢量与其在所述平面上的投影之间的角度。
因此,当我们谈到矢量与平面之间的角度时,最小值就是我们所取的那个值。
这个值也是 π/2 - 你的矢量和垂直于 plane.You 的矢量之间的角度可以阅读更多关于它的信息 on this site。
使用 v
你的矢量(因此 v.x = end.x - start.x
和 y
和 z
同上),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,Asin
函数存在于您的 System.Math class 中。但是,它 return 以弧度表示的值:
Return Value
Type: System.Double
An angle, θ, measured in radians, such that -π/2 ≤ θ ≤ π/2
-or-
NaN if d < -1 or d > 1 or d equals NaN.
幸运的是 the same System.Math class contains the value of π 这样你就可以进行转换了:
a *= 180 / Math.PI
我在 space 中有一条直线,起点和终点 (x,y,z) 并且我试图获得此矢量与 z=0
定义的平面之间的角度.我正在使用 VB.NET
这是我的 3d 环境中的线条图片(我感兴趣的线条以红色圈出):
现在设置为 70 度角。
如果您需要矢量与平面之间的角度,则为该平面中的任何矢量定义角度。但是,只有一个最小值,即矢量与其在所述平面上的投影之间的角度。
因此,当我们谈到矢量与平面之间的角度时,最小值就是我们所取的那个值。
这个值也是 π/2 - 你的矢量和垂直于 plane.You 的矢量之间的角度可以阅读更多关于它的信息 on this site。
使用 v
你的矢量(因此 v.x = end.x - start.x
和 y
和 z
同上),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,Asin
函数存在于您的 System.Math class 中。但是,它 return 以弧度表示的值:
Return Value Type: System.Double An angle, θ, measured in radians, such that -π/2 ≤ θ ≤ π/2 -or- NaN if d < -1 or d > 1 or d equals NaN.
幸运的是 the same System.Math class contains the value of π 这样你就可以进行转换了:
a *= 180 / Math.PI