当前位置: 首页 > article >正文

supermap iclient3d for cesium中的平移,旋转

昨天写的模型机头不是速度的方向

基础知识

屏幕坐标系,笛卡尔空间直角坐标系,大地坐标系

平移和旋转都是基于笛卡尔空间直角坐标系,也就是基于地心。但是我们想实现模型的旋转是基于模型的局部坐标系,那么就要坐标转换。

向量归一化:单位向量

平移

平移思路:

源点笛卡尔坐标系坐标1,终点局部坐标系坐标2,(1)然后计算局部坐标系到笛卡尔坐标系的转换矩阵m,(2)m与坐标2算出终点笛卡尔坐标系坐标,(3)得到笛卡尔坐标系坐标1向笛卡尔坐标系终点坐标的转换矩阵,(4)然后相乘

实现

传入参数是模型entity对象

const Translation =(plane:any)=>
{
    //飞机原来的位置
    let origin=Cesium.Cartesian3.fromDegrees(104.173,30.822,600)
    console.log(origin)
    //(1)    局部转笛卡尔的转换矩阵
    const m = Cesium.Transforms.eastNorthUpToFixedFrame(origin)
    //   平移量的局部坐标系
    const tempTranslation = new Cesium.Cartesian3(500,500,0)
    // (2)  终点的笛卡尔坐标
    const offset = Cesium.Matrix4.multiplyByPoint(m, tempTranslation, new Cesium.Cartesian3(0, 0, 0))
    //计算两个笛卡尔的分量差异
    const translation = Cesium.Cartesian3.subtract(offset, origin, new Cesium.Cartesian3())
    //(3)   分量差异=>转换矩阵
    let m2=Cesium.Matrix4.fromTranslation(translation)
    //(4)   坐标×转换矩阵(你也可以用分量的xyz直接加)
   var newPoint = Cesium.Matrix4.multiplyByPoint(m2, origin, new Cesium.Cartesian3());
    plane.position=newPoint
}

旋转

思路:

好像可以通过很多次矩阵转换达到目标,不过这里我使用


http://www.kler.cn/news/310541.html

相关文章:

  • Linux嵌入式相机 — 项目总结
  • ArcGIS Pro SDK (十四)地图探索 4 书签
  • C语言--结构体(学习笔记)
  • 基于python+django+vue的图书管理系统
  • 光模块SFF-8472
  • 解决Ant Design Vue使用Modal对话框无法关闭的问题《操作Dom不需要降低版本》
  • PostgreSQL的流复制断点续传
  • 选址模型 | 基于混沌模拟退火粒子群优化算法的电动汽车充电站选址与定容(Matlab)
  • linux的redir命令实现端口转发
  • Java研发笔记2——C语言程序设计学习笔记1
  • 封装svg图片
  • fiddler抓包01:工具介绍
  • Oracle 数据库部署与实施
  • 三维天地创新方案助力实验室信息自动化技术深入发展
  • 【裸机装机系列】7.kali(ubuntu)-安装开发所需工具
  • Spring考点总结
  • 软件工程测试
  • 新提案:C++将变得内存安全
  • OpenMV与STM32之间的通信
  • Redis集群_哨兵模式
  • Tuxera NTFS for Mac 2023绿色版
  • LVM硬盘挂载
  • MySQL:bin log
  • Centos中关闭swap分区,关闭内存交换
  • python本地进程通讯----共享内存变量
  • 001、Git开发流程规范
  • 探索pytorch数据集中Mnist数据集的数据格式
  • 深入剖析Docker容器安全:挑战与应对策略
  • 用Mapmost聚类图分析世界
  • python 实现eulers totient欧拉方程算法