我在地球表面有一个点,我正在转换为地球中心的矢量。
我有一个真北角度,描述了点在地球表面的行进路径。
我需要计算一个矢量,该矢量垂直于该点沿地球表面的路径所创建的平面。
我尝试使用描述的here方法计算路径上的任意点 然后取两个向量的交叉乘积,但它似乎不够准确,似乎比必要的开销更大。
这与我的其他帖子ray-polygon-intersection-point-on-the-surface-of-a-sphere有关。
答案 0 :(得分:4)
我假设您正在尝试计算位于路径平面中的矢量,而不是垂直于它(因为您已经有了一个 - 即从原点到矢量的矢量你的观点)。
首先需要计算位于该平面中指向正北和正东的矢量。要执行此操作,请致电P
您的观点,O
原点,N = (0, 0, R)
是您球体顶部的点。然后
e = cross(N - P, P - O)
是一个向东指向的矢量,与球体相切,因为它垂直于P - O
,即球体的半径。
出于类似的原因
n = cross(e, P - O)
将指向正北方,并且将与球体相切。
现在将n
和e
标准化,并且您的点处的切线空间有标准正交基础。要在theta
方向上找到一个向量(比如,从正东轴逆时针方向,以简化数学运算),只需要e
和n
一点:
v = cos(theta) * e + sin(theta) * n
答案 1 :(得分:0)
以下是我对您的问题的理解:
如果我理解了所有这些,你可以按照以下方式做到:
北纬lat
,经度lng
的“真北向量”由
[-sin(lat) * cos(lng), -sin(lat) * sin(lng), cos(lat)]
垂直于“真北向量”的向量,沿纬线(向东)指向
[-sin(lng), cos(lng), 0]
由于这两个矢量识别与地球表面相切的平面,并且指定点的运动方向的矢量也在该平面中,因此您的运动矢量是前两个的线性组合:
[ -(sin(lat) * cos(lng) * cos(th) + sin(lng) * sin(th)) -(sin(lat) * sin(lng) * cos(th) - cos(lng) * sin(th)) cos(lat) * cos(th) ]其中
th
是你的标题角度。
要找到垂直于该运动矢量的矢量,您可以只取半径矢量的叉积(即从地球中心指向您的点的矢量,
{{ 2}}用运动矢量。(数学会很麻烦,最好让计算机处理它)
答案 2 :(得分:0)
您已有2个向量:
N =(0,0,1)从原点直接指向。
P =(a,b,c)从原点指向你的点。
计算您的点的单位矢量 U = P / | P |
计算垂直于U和N的单位矢量 E = U X N
计算垂直于U和E的单位向量(这将与球体相切) T = U X E. T可以指向北方或南方,所以 如果T.z< 0,将T乘以-1。
T现在指向正北,并且与P处球体相切的平面平行。
您现在有足够的信息来构建旋转矩阵(R),因此您可以围绕U旋转T.您可以找到如何在wikipedia上围绕任意轴旋转矩阵:
使用R,您可以计算指向行进方向的矢量。
A = RT
答案是您正在寻找的答案。