在做一个和地理相关的程序,有两种视角:地图视角和第一人称视角。
目前在大地图上都是记录经纬度坐标,比如[120.123456,21.1233456],类似现在的地图 APP 上标志。
转到第一人称下时,所有物品坐标都以当前视角为原点,依据其经纬度重新计算位置,这个目前也没有问题,隐约觉得哪里没考虑周全。
看了下一个叫 SpaceEngine 的免费游戏(真不是广告,这个游戏是完全免费的,不开源),玩家可以在宇宙中穿梭,又可以下潜到一个星球表面,这个坐标数值跨度得有 10 的几十次方了吧,然而进出太空还是挺平滑的。像这种程序,如果要求玩家可以降落到星球表面(整个世界完全是 1 : 1 的),人物在表面走路移动的逻辑又要怎么实现呢?因为靠太空坐标系这种精度肯定是完全没法做到细微移动的。或者在一个空间中,随机取一个点作为原点,建立局部坐标系?
再换个例子,像洲际导弹,军事 GPS 定位精确到米以下的。导弹飞行范围有半个地球, GPS 是整个地球,在三维空间坐标系统下面,这个空间原点怎么取呢?以地球中心为原点吗?如果这样取按目前 C 语言内置 double 类型应该不够处理(要做区域划分?)。
唔,现在思考的还比较粗略,表达也挺模糊,周末再仔细斟酌下...
另外...有哪些讨论涉及系统设计的文章或开源软件吗? 有个前人的思路就好,我怕摸黑走到坑里去··
1
xiaofami 2015-11-13 15:52:21 +08:00 via Android 1
多年前做 GIS 课程设计时用过 QGIS 。给定一张地图将其数字化,首先录入地图上几个边界点的坐标,然后选取坐标系。由于地球是个球体,平面展开会产生拉伸,越靠近边界扭曲越大,所以不同区域有各自的坐标系,要根据测绘区域选取。国内的有北京 54 坐标系,西安 80 坐标系等。
涉及空间的没做过~ |
2
learnshare 2015-11-13 15:59:22 +08:00 1
https://zh.wikipedia.org/wiki/%E5%A4%A9%E7%90%83%E5%9D%90%E6%A0%87%E7%B3%BB%E7%BB%9F 天球坐标系统
比较常见的是类似地球经纬度的方式,以地心为参考点,以赤道或黄道面为参考平面,以地球南北极方向为参考轴。 |
3
learnshare 2015-11-13 16:01:16 +08:00
@learnshare 比如在赤道坐标系统里,经度、纬度和距离(类似于地球坐标的海拔),就可以定位一个点
|
4
hitmanx 2015-11-13 17:12:11 +08:00
你这业务真广啊。。
|
5
loading 2015-11-13 17:17:25 +08:00 via Android
洲际导弹…似乎确实很难算!以前以为只要燃料够就行了,目前看来,就算美国开放随便我写程序,我也打不中!
|
6
ioth 2015-11-13 18:14:59 +08:00
gps 只可能给美军自己用。
gis 和 gps 是 3s 里面的不同东西。 太空又不是 3s 的内容了。 |
7
seki 2015-11-13 18:21:02 +08:00 1
一楼说的是大地坐标系
仅对于地球表面而言,根据你的项目需要,可以选择等角投影、等距投影,等面积投影等。处理这类坐标转换可以用 gdal ,并且这些投影的相关信息也能够在网上查到 一楼所说的 beijing 54 和 xian 80 都属于 Gauss Kruger 投影,是一种等角投影。两者的区别在于 datum 定义参数的不同 |
8
acros OP |
9
cdxem713 2015-11-13 18:29:31 +08:00 via iPhone
在地球上用经纬度貌似也没啥问题啊,还有会用莫卡托坐标系,是米制的,做导弹啥的应该会换算成这个坐标。
飞宇宙上就不知道了,猜想是在宇宙中用通知坐标系,在每个星球用各自的坐标系? |
11
Robling 2015-11-14 10:04:29 +08:00
浮点数解决不了的精度问题可以用定点数解决。
|