threejs-经纬度转换成xyz坐标的方法

来源:互联网 发布:淘宝网中老年女冬装 编辑:程序博客网 时间:2024/06/05 18:09

用threejs做3D应用时,很经常会接触到球状物体,比如说地球,要定义球上的一点,用经纬度是常用的办法。现在,我们要在北京这个地方标一个点,北京的坐标为——北纬39.9”,东经116. 3”,该怎么做呢?

其实这就要用到“经纬度转换成xyz坐标”,因为在threejs中时以xyz来定义物体位置的。

坐标分析法

如下图所示,要求球上一点D的xyz坐标:

这里写图片描述

从上面的图就可以直观分析出D点的xyz坐标:

y=OE=ODsinDOB

OB=ODcosDOB

z=OA=OBcosAOB

x=OC=OBsinAOB

下面是一个实现:

/** * 经纬度转xyz * @param longitude 经度 * @param latitude 纬度 * @param radius 半径 */function lglt2xyz(longitude,latitude,radius){    var lg = degToRad(longitude) , lt = degToRad(latitude);    var y = radius * Math.sin(lt);    var temp = radius * Math.cos(lt);    var x = temp * Math.sin(lg);    var z = temp * Math.cos(lg);    // console.log(x+","+y+","+z);    return {x:x , y:y ,z:z}}

旋转法

在threejs中位置本质是一个向量,因此也可以通过向量的旋转来获得最终位置,如下所示:
这里写图片描述

先选一个特殊的向量作为旋转的起点,如在Z轴上的向量 OA,其经纬度都为0,那么AOB 就是经度,BOC 就是纬度,这样,
(1)让 OA 先以y轴为轴,旋转经度角度,得到 OB
(2) 将 OB 顺时针旋转 90 度 ,就能得到平面 BOC 的法向量 OD (这里没有画出,它是在OA 的左侧)
(3)让 OB 以 OD 为轴 ,旋转纬度角度,就得到 OC

这个可以直接通过向量的旋转就得到目标的坐标位置,还未用代码验证。

原创粉丝点击