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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。