Cesium矩阵变换实现本地坐标转世界坐标

文章目录

主要代码

        // 本地坐标与世界坐标的变换
        // 获取A点对应的世界坐标
        let posA =  Cesium.Cartesian3.fromDegrees(0, 0.0, 0.0);
        console.log("A点世界坐标:", posA);
        // 本地坐标到世界坐标的变换矩阵
        let localToWorldMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(posA);
        // 通过矩阵的逆,求出世界坐标到本地坐标的变换矩阵
        let worldToLocalMatrix = Cesium.Matrix4.inverse(localToWorldMatrix , new Cesium.Matrix4());
        
        // 将B点世界坐标转换到A点本地坐标系下的坐标
        let posB =  Cesium.Cartesian3.fromDegrees(2, 1.0, 0.0);
        console.log("B点世界坐标:", posB);
        let localPosB = Cesium.Matrix4.multiplyByPoint(worldToLocalMatrix , posB, new Cesium.Cartesian3());
        console.log("B点本地坐标(以A为原点的本地坐标系):", localPosB);


        // 将B点本地坐标(A为原点的本地坐标系)转世界坐标
        let worldPointB = Cesium.Matrix4.multiplyByPoint(localToWorldMatrix , localPosB, new Cesium.Cartesian3());
        console.log("B点世界坐标:", worldPointB);
        console.log("B点世界坐标(经纬度格式):", Cesium.Cartographic.fromCartesian(worldPointB));
        // 部分输出
        
        // A点世界坐标: Cartesian3 {x: 0, y: 0, z: 1}
 		// B点世界坐标: Cartesian3 {x: 0, y: 0, z: 2}
		// B点本地坐标(以A为原点的本地坐标系): Cartesian3 {x: 0, y: 0, z: 1}
		
		// A点世界坐标: Cartesian3 {x: 0, y: 1, z: 1}
		// B点世界坐标: Cartesian3 {x: 0, y: 0, z: 2}
		// B点本地坐标(以A为原点的本地坐标系): Cartesian3 {x: 0, y: 1.414205586940174, z: 0.00474951231167009}
		// 可以看出并不是直接的加减操作,说明坐标系变换中包含旋转

参考链接

[1]. Cesium之矩阵变换

[2]. Cesium之球心坐标与本地坐标

[3]. Cesium当中的逆矩阵的简单理解

猜你喜欢

转载自blog.csdn.net/wml00000/article/details/125290386