python经纬度转换为平面坐标,python大地坐标系转换经纬度

  python经纬度转换为平面坐标,python大地坐标系转换经纬度

  使用数组我想在坐标系之间转换位置向量。

  我有两个三维空间的飞机。

  每个平面由其中心定义:C[0]=(X0,Y0,Z0)

  C[1]=(X1,Y1,Z1)

  (X,Y,Z指全球坐标系)C=np.array([[0,0,0],[-4,2,1]])

  以及它的法向量:H[0]=(cos(alpha[0])*sin(A[0]),cos(alpha[0])*cos(A[0]),sin(A[0])

  H[1]=(cos(alpha[1])*sin(A[1]),cos(alpha[1])*cos(A[1]),sin(A[1])

  阿尔法=仰角

  A=方位角H=np.array([[-0.23,-0.45,0.86],[-0.12,-0.24,0.86]])

  我有一个点p(xp,yp,0)位于平面0(xp,yp指的是一个具有中心C[0]的局部坐标系,当=A=0时,其坐标轴与全局坐标轴对齐)

  我使用以下函数从平面0的局部坐标系转换为全局坐标系:将数组作为铭牌导入

  def rotateaxix(alpha):

  绕x轴旋转

  :参数alpha:以度为单位的平面高度角

  :返回:x轴旋转矩阵

  rotX=np.array([[1,0,0],[0,np.cos(np.deg2rad(alpha))、np.sin(np.deg2rad(alpha))],[0,-np.sin(np.deg2rad(alpha))、np.cos(np.deg2rad(alpha))])

  返回位移

  def rotateAxisZ(A):

  绕z轴旋转

  :参数A:以度为单位的平面方位角

  :返回:z轴旋转矩阵

  rotZ=NP。数组([[np.cos(np.deg2rad(A))、np.sin(np.deg2rad(A))、0]、[-np.sin(np.deg2rad(A))、np .cos(NP。deg 2 rad(A)),0],[0,0,1]])

  返回自由度

  def local2Global(positionVector,planeNormalVector,positionVectorLocal):

  将点从平面的局部坐标系转换到全局坐标系

  :参数位置向量:全局坐标中的平面中心

  :参数平面法线向量:平面的法向量

  :param positionVectorLocal:平面(xp,yp,0)上相对于平面局部坐标系的点

  :返回:全局坐标中点的位置向量

  C=np.array([-10,20,1200])

  H=np.array([-0.23,-0.45,0.86])

  p=np.array([-150,-1.5,0])

  P=local2Global(C,H,p)

  NP。利纳格。norm(P-C)==NP。利纳格。常模(P)

  真实的

  alpha=NP。弧度2度(NP。反正弦(平面法向量[2])

  a=NP。其中(平面法向量[1]0,NP。弧度2度(NP。arccos(平面法向量[1]/NP。cos(NP。deg 2 rad(alpha))),360-NP。弧度2度(NP。arccos(平面法向量[1]/NP。cos(NP。度2拉德(阿尔法))))

  positionVectorGlobal=positionvectornp。点(NP。dot(rotateAxisZ(A),rotateAxisX(90 - alpha)),positionVectorLocal)

  返回positionVectorGlobal

  上面的工作似乎和预期的一样。

  然后我计算一条线从平面0p(xp,yp,0)上的一个点经过的交点,它的方向向量是S=(0.56,-0.77,0.3) C=np.array([[0,0,0],[-4,2,1]]) #平面中心

  H=np.array([[-0.23,-0.45,0.86],[-0.12,-0.24,0.86]]) #平面法向量

  S=np.array([0.56,-0.77,0.3]) #一个方向向量

  p=np.array([-1.5,-1.5,0]) #平面上的一点

  相交平面指数=0 #选择相交平面,该平面上有点p

  intersectedPlaneIndex=1 #该平面与从p通过的方向向量为s的直线相交

  p=local 2 global(C[相交平面索引],H[相交平面索引],p) #全局坐标中的点p

  np.isclose(np.linalg.norm(p),np。利纳格。常模(P-C[相交平面指数]),10e-8)

  真实的

  所以第一个转变是成功的。

  现在让我们在全局坐标系中找到交点e t=NP。dot(H[相交平面索引],C[相交平面索引,-P)/NP。点(H[相交平面索引],S)

  E=P S * t

  (戊,2)

  数组([ 2.73,-0.67,1.19])

  到目前为止,我找到了位于平面一上的点电子(全局坐标)。

  问题是:

  如何将点E从全局坐标转换为平面一的坐标系并获得e(xe,ye,0)?

  我试过:def global2Local(positionVector,planeNormalVector,positionVectorGlobal):

  将点从全局坐标系转换到平面的局部坐标系

  :参数位置向量:全局坐标中的平面中心

  :参数平面法线向量:平面的法向量

  :param positionVectorGlobal:全局坐标中的一个点

  :注意:该函数通过位矢平移给定的位置向量,并旋转基轴,以获得平面坐标系中的位置向量坐标

  :警告:它没有正常工作

  alpha=NP。弧度2度(NP。反正弦(平面法向量[2])

  a=NP。其中(平面法向量[1]0,NP。弧度2度(NP。arccos(平面法向量[1]/NP。cos(NP。deg 2 rad(alpha))),360-NP。弧度2度(NP。arccos(平面法向量[1]/NP。cos(NP。度2拉德(阿尔法))))

  positionVectorLocal=NP。点(NP。点(NP。利纳格。inv(rotateAxisZ(A))),NP。利纳格。inv(rotateaxsx(90-alpha))、positionVectorGlobal-positionVector)positionVectorGlobal

  返回位置向量本地

  以及:E=全局2局部(C[相交平面索引],H[相交平面索引],E)

  e

  数组([ -2.54839059e 00,-5.48380179e 00,-1.42292121e-03])

  首先,只要英[2]接近于零,这看起来是可以的,但是标准(交叉平面指数)

  7.2440723159783182

  规范(五)

  6.0470140356703537

  所以转换是错误的。有什么想法吗?

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: