计算具有特定中心的球的3D点之间的角度

时间:2019-04-17 18:41:19

标签: r math vector geometry coordinates

我在3D空间中有一个起点(x,y,z),它对应于一个圆的中心,在终点(x2,y2,z2)中,对应于球的表面。我在球体表面上还有许多其他端点(例如x3,y3,z3),每个端点具有相同的半径长度(rr)。

我想计算从中心点(起点)到终点以及所有其他终点的运动角度。最终,假设有100个球体,我想看看端点是否都从中心以相似的方向性/角度移动。鉴于此目的,我需要使用0和360的方向来“看起来相似”,因此我认为我需要使用某种类型的特定平面。

这篇文章(https://math.stackexchange.com/questions/707673/find-angle-in-degrees-from-one-point-to-another-in-2d-space)末尾的评论使用atan2函数具有很好的图形和答案,但这仅适用于2D空间。

这篇文章(Signed angle between two 3D vectors with same origin within the same plane)和这篇Angle between 3 points in 3d space使我开始学习。

这个(The X angle between two 3D vectors?)也很有用,但根据水平系统计算出错误的角度类型(我认为)。

给出所有这些,这就是到目前为止我要提出的内容。这里有几点:

a =  c(-0.0684486861, 0.0125857380, 0.0201056441) #start/center of sphere
b = c(-0.0650557851, 0.0175286346, -0.0228805516) #end point

v1 = c( (a[1] - b[1]), (a[2] - b[2]), (a[3] - b[3]) ) #vector

那么我想我需要计算v1和从两个点成90度平行于平面的向量之间的点积?然后在角度之间取余弦?但是,如果半径始终保持不变不是那么容易吗?

我对算术还不够了解,甚至连两点都没有,要为我所有的领域/点做这些的开发代码也少得多。 指导表示赞赏。

1 个答案:

答案 0 :(得分:0)

术语“角度”不适用于两个3D点之间的方向。

点差 D 是矢量。它由三个分量(x,y,z)表征。

您可以将此向量制作单位归一化 d ,并将此方向表示为direction cosines,其中d.x = cos(angle between d and OX),依此类推。

3D方向也可能在spherical coordinate system中表示为方向与OZ轴之间的夹角theta,以及方向在OXY平面和OX轴上的投影之间的夹角phi

但是对于方向比较,没有唯一的通用方法。您需要根据自己的特定目的定义一些指标。例如,归一化向量的标量积(方向之间的余弦值)


如果半径为rr,球体中心为C=(xc,yc,yc),球体P=(x1,y1,y1)P2=(x2,y2,y2)上有两个点,则从中心到这些点的方向之间的角度就是向量之间的角度:

V1 = P1 - C
V2 = P2 - C

是(使用点积和反余弦)

angle = acos( ((x1-cx)*(x2-cx) + (y1-cy)*(y2-cy) + (z1-cz)*(z2-cz)) / (rr*rr) )