我有一条直线,在空间中有一个起点和终点(x,y,z),我试图得到这个向量和z=0
定义的平面之间的角度。我正在使用VB.NET
下面是我的3d环境中这条线的一张图片(我被插入的那条线是用红色圈起来的):
它现在被设置成70度的角度。
发布于 2015-01-20 10:15:40
你需要定义角度的2条射线。
如果你想要一个向量和一个平面之间的角度,它被定义为该平面中的任何一个向量。然而,它只有一个极小值,即向量与其投影到所述平面之间的角度。
因此,当我们谈到向量和平面之间的角度时,这个极小值就是我们所取的。
这个值也是plane.You /2--向量和向量之间的角度对在这个网站上来说是正常的,可以读取更多关于它的信息,所有的在这个网站上。
用v
表示向量(例如,y
和z
的v.x = end.x - start.x
和idem ),将法线与平面相对应,以及从标量积的定义中得知:
<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 ))
根据这份文件,Asin
函数存在于System.Math类中。但是,它确实返回了以弧度表示的值:
返回值类型: System.Double a角,θ,以弧度度量,如果d< -1或d>1或d等于NaN,则为-π/2≤θ≤π/2-或- NaN。
幸运的是,同一个System.Math类包含π的值。使您能够执行转换:
a *= 180 / Math.PI
https://stackoverflow.com/questions/28050682
复制相似问题