当前位置:网站首页>数字孪生园区场景中的坐标知识
数字孪生园区场景中的坐标知识
2022-08-02 15:59:00 【InfoQ】
在开发数字孪生可视化项目时,经常会遇到各种坐标相关的问题可能会导致交付项目的效率降低。关于坐标,可能有这些问题:
① 什么是坐标系?低代码ThingJS用的是哪种坐标系?
② 在场景中需要什么信息才能确定某个对象的位置?
本期我们重点讲解一下园区场景中的坐标知识。
坐标(系)的基础概念、分类以及轴心点
基础概念及分类
从空间维度出发,坐标系大体可以分为两大类:平面坐标系、空间坐标系。坐标也会有相应的表达方式。

① 平面坐标系

② 空间(直角)坐标系
低代码ThingJS的坐标系是右手坐标系,即Y轴朝上, Z轴朝向屏幕外,如下图:

和空间直角坐标系不同的地方是三个轴的方向不一样。把右手放在原点的位置,使大拇指、食指和中指互成直角,把大拇指指向x轴的正方向,食指指向y轴的正方向时,中指所指的方向就是z轴的正方向。
对比看看 3DsMax 里的坐标系:

可以看出如果要把 Max 里的坐标 [x1,y1,z1] 转换到 ThingJS 中需要 y 与z 互换后再取反,如下图:

轴心点
园区里摆放的物体可能是规则的,也可能是不规则的。为了更好地对控制一个物体的位置并进行缩放 / 旋转,在表达一个物体的坐标时,我们会用这个物体的"轴心点"来代表这个物体的位置。简单说就是对象的轴心点就是对象自身坐标系的原点。
例如:这是园区中的一棵树,放缩时如果轴心点在地上,整棵树可以向上缩放。

如果轴心点在中心,就会不方便控制,根部会扎到地里。如下图:

再比如,一个雷达的轴心点应该旋转轴中心,以方便进行旋转的控制。如果轴心点在盖上,想一想就觉得很复杂....

坐标系的分类
基于"右手坐标系"都有哪些分类?在不同的使用场景下,选择合适的坐标系会让我们事半功倍。
1、世界坐标系
世界坐标系又称全局坐标系或绝对坐标系。当场景(注意不是指园区)创建后,在整个场景空间中标绘一个位置,此时场景空间的坐标系就是世界坐标系。
物体在世界坐标系下的坐标就是该物体的绝对坐标。
使用场景:物体是独立的,它的运动不受场景中其他物体的影响,只和整个场景有关系。

2、父物体坐标系
当在场景中创建了园区,在园区下放置一个飞机,飞机是园区的子物体,想在园区的坐标系下,设置飞机的位置,这时使用的园区的坐标系,就是飞机的父物体坐标系。

PS:当场景中只有一个园区时,以园区为参考建立的坐标系 = 世界坐标系,也就是说:飞机在世界坐标系的坐标和父物体下的坐标值是一致的。
使用场景:一个物体的运动受到另外一个物体的影响,这时就可以以“另外一个物体”为参考建立一个坐标系,作为该物体的父物体坐标系。
相对坐标
除了世界坐标系,其他所有的坐标系,其实都有"相对"的概念在里边。以任何物体为参考描述其他物体相对于该物体的空间位置即为
相对坐标
。
一个物体的绝对坐标只能有一个,相对坐标可以有无数个。

3、自身坐标系
有时候我们也希望在以自身作为坐标系统下控制。比如,飞机向前飞行20米,就是在自身坐标系下设置坐标[0,0,20](物体自身的z轴正向,可以理解为是物体正面的方向,比如我们面部的朝向)。

所以文章开头的问题在看到某个对象位置的坐标时比如 [5,18,10](假设坐标是 ThingJS 标准的右手坐标系下的坐标),还需要什么信息才能确定这个对象的位置呢?首先要知道,这个坐标是绝对坐标还是相对坐标。其次,如果是相对坐标,还要知道它是相对于谁的坐标。
弄清楚了以上信息,就能确定这个对象的位置。
边栏推荐
猜你喜欢
随机推荐
11.1-CM24 最近公共祖先
Mysql 查询语句中where字段= '' 作用是什么 ?如何实现多条件查询
Break the stereotype, DIY is your own unique mall
从Oracle日志解析学习数据库内核原理
2022 年值得尝试的 7 个 MQTT 客户端工具
[LeetCode]剑指 Offer 55 - I. 二叉树的深度
2.5 - 死锁
AI智能剪辑,仅需2秒一键提取精彩片段
numpy的学习笔记
AI+BI+可视化,Sugar BI架构深度剖析
tiup mirror set
锁定和并发控制(四)
Qt | 关于样式表的使用 QStyleSheet
CWE4.8: The 25 most damaging software security issues in 2022
Qt reads Json files (including source code + comments)
JZ10 斐波那契数列
Qt读取Json文件(含源码+注释)
ROS 之 KUKA iiwa编程
Azure Kinect(K4A)人体识别跟踪进阶
let块级作用域,var变量提升