三种坐标系学习

这篇具有很好参考价值的文章主要介绍了三种坐标系学习。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

坐标系学习

三种坐标系介绍

1.地心地固坐标系(ECEF)

地心地固坐标系,也叫ECEF坐标系。其原点为地球的质心。

x轴延伸通过本初子午线(0度经度)和赤道(0度纬度)的交点。

Z轴延伸通过北极(即与地球旋转轴重合)。

y轴完成右手坐标系,穿过赤道和90度经度。

如下图所示

ecef坐标系,unity,学习,几何学

所用的坐标系是右手坐标系(右手定则),将手掌伸直,掌面朝向自己,将中指垂直于掌面,然后将大拇指垂直于中指和食指构成的平面,就构成右手坐标系,此时大拇指,食指,中指分别代表了y轴,z轴,x轴。

2.经纬高坐标系(84坐标系)

经纬高坐标系(84坐标系)是由经度(longitude),纬度(latitude),高度(altitude)组成的坐标系,也叫LLA坐标系。可以说是最为广泛的一个坐标系,他给出一点的大地纬度,大地经度和大地高度就可以知道这个点在地球上的位置,所以叫做经纬高坐标系。

84坐标系和上面的ECEF坐标系一样,把ECEF放到GPS中就是84坐标系

  1. 大地纬度是过用户点P的基准椭球面法线与赤道面的夹角。纬度在-90度到90度之间,北半球为正,南半球为负
  2. 大地经度是过用户点P的子午面与本初子午线之间的夹角。经度值在-180度到180之间
  3. 大地高度h是过用户点P到基准椭球面的法线距离,基准椭球面里面为负,外面为正ecef坐标系,unity,学习,几何学

3.东北天坐标系(ENU)

东北天坐标系也叫站心坐标系,以用户所在位置P为坐标原点

坐标轴定义:x轴指向东边,y轴指向北边,z轴指向天顶

简介:ENU局部坐标系采用三维直角坐标系来描述地球表面,实际应用比较困难,因此一般使用简化后的二维投影坐标系来描述,在众多二维投影坐标系中,统一横轴墨卡托(UTM)坐标系是一种应用较为广泛的一种。UTM坐标系统使用基于网格的方法表示坐标,他将地球分为60个经度区,每个区包含6度的精度范围,每个区内的坐标均基于横轴墨卡托投影,如下图所示:

ecef坐标系,unity,学习,几何学

坐标系之间的转换

1.WGS84--ECEF

需要用到的参数:

地球长半轴半径:a

地球短半轴半径:b

椭球的第一偏心率:e

卯酉圈半径:N

输入:

经度(Lon),纬度(Lat),高度(Ait)

计算:

偏心率:e = sqart(a*a - b*b) / a;

卯酉圈半径:N = a/sqart(1-e*e*sin(Lat)*sin(Lat));

输出X,Y,Z

X = (N+Ait)*cos(Lat)*cos(Lon);

Y = (N+Ait)*cos(Lat)*sin(Lon);

Z =(N*(1-e*e)+Ait)*sin(Lat);

  1. ECEF--ENU

坐标原点P0(x0, y0, z0),计算点P(x, y, z)以P0为坐标原点的ENU坐标系位置,这里用到的P0的经纬度LLA(lon0, lat0, alt0)。

ecef坐标系,unity,学习,几何学

代码:文章来源地址https://www.toymoban.com/news/detail-789868.html

  1. // ECEF->ENU
  2.   Re = R0 / sqrt(1 - e * e * sin(p.latitude * torad) * sin(p.latitude * torad));
  3.     double dx_ECEF = (Re + p.height) * cos(p.latitude * torad) * cos(p.longitude * torad) - x0_ECEF;
  4.     double dy_ECEF = (Re + p.height) * cos(p.latitude * torad) * sin(p.longitude * torad) - y0_ECEF;
  5.     double dz_ECEF = (Re * (1 - e * e) + p.height) * sin(p.latitude * torad) - z0_ECEF;
  6.     double x = -sin(p.longitude * torad) * dx_ECEF + cos(p.longitude * torad) * dy_ECEF;
  7.     double y = -sin(p.latitude * torad) * cos(p.longitude * torad) * dx_ECEF - sin(p.latitude * torad) * sin(p.longitude * torad) * dy_ECEF + cos(p.latitude * torad) * dz_ECEF;
  8.     double z = cos(p.latitude * torad) * cos(p.longitude * torad) * dx_ECEF + cos(p.latitude * torad) * sin(p.longitude * torad) * dy_ECEF + sin(p.latitude * torad) * dz_ECEF;
  1. ENU-ECEF

公式转化

ecef坐标系,unity,学习,几何学

  1. ECEF-WGS84

ECEF坐标系下点(X,Y,Z)转换为LLA坐标系下的(lon,lat,alt)

ecef坐标系,unity,学习,几何学

  1. WGS84-ENU

公式转化

上述可以看到,从LLA坐标系转换到enu坐标系有较多计算量,在考虑地球偏心率e ee很小的前提下,可以做一定的近似公式计算

ecef坐标系,unity,学习,几何学

代码:

  1. //LLA->ENU
  2. void gps2xy(const &p, const double &ori_longitude, const double &ori_latitude, const double &ori_height)
  3. {
  4.     double R0 = 6378137.0;
  5.     const double e = 0.0818191908425;
  6.     const double torad = M_PI / 180;
  7.     double Re = R0 / sqrt(1 - e * e * sin(ori_latitude * torad) * sin(ori_latitude * torad));
  8.     double x0_ECEF = (Re + ori_height) * cos(ori_latitude * torad) * cos(ori_longitude * torad);
  9.     double y0_ECEF = (Re + ori_height) * cos(ori_latitude * torad) * sin(ori_longitude * torad);
  10.     double z0_ECEF = (Re * (1 - e * e) + ori_height) * sin(ori_latitude * torad);
  11.     Re = R0 / sqrt(1 - e * e * sin(p.latitude * torad) * sin(p.latitude * torad));
  12.     double dx_ECEF = (Re + p.height) * cos(p.latitude * torad) * cos(p.longitude * torad) - x0_ECEF;
  13.     double dy_ECEF = (Re + p.height) * cos(p.latitude * torad) * sin(p.longitude * torad) - y0_ECEF;
  14.     double dz_ECEF = (Re * (1 - e * e) + p.height) * sin(p.latitude * torad) - z0_ECEF;
  15.     // ECEF to ENU
  16.     double x = -sin(p.longitude * torad) * dx_ECEF + cos(p.longitude * torad) * dy_ECEF;
  17.     double y = -sin(p.latitude * torad) * cos(p.longitude * torad) * dx_ECEF - sin(p.latitude * torad) * sin(p.longitude * torad) * dy_ECEF + cos(p.latitude * torad) * dz_ECEF;
  18.     double z = cos(p.latitude * torad) * cos(p.longitude * torad) * dx_ECEF + cos(p.latitude * torad) * sin(p.longitude * torad) * dy_ECEF + sin(p.latitude * torad) * dz_ECEF;
  19. }

到了这里,关于三种坐标系学习的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Unity坐标系的转换—世界坐标转为UI坐标

    直接调用WorldToAnchorPos,传入对应的参数返回UGUI坐标

    2024年04月13日
    浏览(13)
  • Unity 坐标系

    Unity 坐标系

    常见的三维软件都采用笛卡尔坐标系,也就是常见的xyz轴坐标系。笛卡尔坐标系可以是左手坐标系也可以是右手坐标系,如下图所示  两种坐标系是镜像对称的。而Unity采用左手系,且xyz轴的默认方向与图中的左手系完全一样,分别对应右、上、前。 总结如下: x:右,(1,

    2024年02月07日
    浏览(15)
  • Unity坐标系转换

    坐标系的转换 世界坐标系和本地坐标系的相互转换函数如下。 ● Transform.TransformPoint(Vector3position):将一个坐标点从本地坐标系转换到世界坐标系。 ● Transform.InverseTransformPoint(Vector3position):将一个坐标点从世界坐标系转换到本地坐标系。 ● Transform.TransformDirection(Vec

    2024年02月07日
    浏览(10)
  • 【Unity基础概念--坐标系】

    【Unity基础概念--坐标系】

    对于我这个Unity初学者来说,在学习过一段时间的Unity相关知识后,对于Unity中坐标系的概念不是很明确清楚,是时候做一下坐标系相关知识的总结了。 世界坐标是按照笛卡尔坐标系定义出来的绝对坐标系,下面的各种坐标系都建立在世界坐标的基础上。我们知道二维平面内任

    2024年01月16日
    浏览(14)
  • Unity入门日记——父子坐标系

    Unity入门日记——父子坐标系

    Unity中设置父子关系后,子对象坐标转化为相对坐标;   设图中cube为父对象,sphere为子对象,未设置父子关系时,相对于世界坐标系的各自坐标如下:    将sphere设为cube子对象,坐标变化: 相对世界坐标系的子对象坐标与父对象坐标之差,乘以父对象坐标系归一化尺度;

    2024年02月11日
    浏览(11)
  • unity | 各种坐标系通俗讲解

    unity | 各种坐标系通俗讲解

    一、三维坐标 三维坐标:x,y,z都有数值 unity里面只有一个三维坐标,就是世界坐标 ,unity里面相当于一个小的世界,在这里面物体的坐标叫做世界坐标。 但是每个物体都有两个世界坐标,一个是真的世界坐标,一个是相对于父物体的世界坐标,代码如下 也就是只要是这两个

    2024年02月01日
    浏览(12)
  • UE和Unity坐标系转换

    UE和Unity坐标系转换

    内容将会持续更新,有错误的地方欢迎指正,谢谢!   UE和Unity坐标系转换       TechX 坚持将创新的科技带给世界! 拥有更好的学习体验 —— 不断努力,不断进步,不断探索 TechX —— 心探索、心进取! 助力快速掌握 UE和Unity 坐标系转换 为初学者节省宝贵的学习时间,避免

    2024年01月19日
    浏览(11)
  • unity和3d坐标系以及和ue的比较

    unity和3d坐标系以及和ue的比较

    unity和ue都采用左手坐标系 在3d软件中,大多数软件都用红色代表x轴,绿色代表y轴,蓝色代表z轴。 不同的是 : 在unity中X轴代表右方,Y轴代表上方,Z轴代表前方; 在ue中X轴代表前方,Y轴代表右方,Z轴代表上方; 缩放 :根据自身缩放,不受坐标系影响, (移动和旋转则分

    2024年02月11日
    浏览(21)
  • Unity开发3 坐标系及工具、快捷键操作

    左手坐标系:X→ Y↑ Z朝向屏幕内部 右手坐标系:X→ Y↑ Z朝向屏幕外部 Unity使用的是左手坐标系 世界坐标系就像经纬度一样,游戏对象的“位置”即相对于世界坐标系。 世界坐标系原点为(0,0,0)。 可将一游戏对象拖拽至另一游戏对象下生成父子关系。 生成父子关系后,

    2023年04月17日
    浏览(12)
  • 【Unity】坐标系、Vector3基础和Transform位置

    【Unity】坐标系、Vector3基础和Transform位置

    在学习Vector3和Transform之前需要先了解一下Unity坐标系: 在Unity中有很多坐标系,诸如世界坐标系、局部坐标系、屏幕坐标系、视口坐标系等等,这些坐标系往往会给我带来很大的困扰,但又缺一不可。比如当你需要获取鼠标在世界坐标的位置时,你就需要明白什么是世界坐标

    2024年02月02日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包