1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > threejs-经纬度转换成xyz坐标的方法

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

时间:2020-08-07 11:21:07

相关推荐

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

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

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

坐标分析法

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

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

y=OE=ODsin∠DOBOB=ODcos∠DOBz=OA=OBcos∠AOBx=OC=OBsin∠AOB

下面是一个实现:

/*** 经纬度转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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。