繁体   English   中英

给定 3D 空间中的一条线,我如何找到从它到点的角度?

[英]Given a line in 3D space, how do I find the angle from it to a point?

我在 3D 空间中有两组点。 我想画一条穿过两组点中心的线,然后找到从该线到每个点的角度。 从那里,我将根据两个角度的接近程度来匹配两个设置中的点。

我知道如何找到每组点的中心(只是将它们平均在一起)并且我知道如何匹配它们(甚至考虑到它们会环绕的事实),但我不知道如何找到从线到点的角度。

基本上我是说我希望所有点都投影到以穿过中心的直线为中心并垂直于该直线的平面上,并且我希望从该直线到该平面上每个点的角度。

我希望我已经把自己说清楚了……我在这方面没有太多正式的培训(有点让我想起几年前大学时的 Diff Eq),所以请问我是否误用了一个术语并感到困惑你。

我想我可以将任何其他语言的解决方案翻译成对我有用,因为我认为这主要是与语言无关的数学,但我正在使用 Three.JS 所以如果你的解决方案适用于 javascript/Three.JS(这是他们的Vector3 类文档,只是为了让您知道它提供了哪些帮助函数),这将是最有帮助的。 谢谢!

一般来说,2个向量的积等于2个向量之间夹角的余弦乘以两个向量的幅度(长度)。

dot( A, B ) == | A | * | B | * cos( angle_A_B ) 

因此,2 个单位向量的积等于 2 个向量之间夹角的余弦,因为单位向量的长度是 1。

uA = normalize( A )
uB = normalize( B )
cos( angle_A_B ) == dot( uA, uB )

点 A B


在 *three.js* 中,所有计算都可以通过 [`THREE.Vector3`][2] 的操作来完成:
var angle_in_radians = a.angleTo(b);

正如下面的评论中提到的,在 *three.js* 中有一个操作 **`.angleTo`**,它简化了很多事情:
 var angle_in_radians = a.angleTo(b);

如果你有 4 个点 `Pa`、`Pb`、`Pc`、`Pd`,它们定义了从 `Pa` 到 `Pb` 的 2 条线,并形成了 `Pc` 到 `Pd`,那么这两个向量就可以计算出来如下:
 var Pa = new THREE.Vector3( ... ); var Pb = new THREE.Vector3( ... ); var Pc = new THREE.Vector3( ... ); var Pd = new THREE.Vector3( ... ); var a = new THREE.Vector3(); a.copy( Pb ).sub( Pa ); var b = new THREE.Vector3(); a.copy( Pd ).sub( Pc );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM