怎么建立一个3D坐标系,再把3D图放在制备好的3D坐标系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么建立一个3D坐标系,再把3D图放在制备好的3D坐标系相关的知识,希望对你有一定的参考价值。
我想建立一个3D坐标系,再把立体的图形放在制备好的3D坐标系,请问用什么软件制作3D三维图,另外具体的步骤是什么?
参考技术A uBuilder功能z坐标)
z坐标)
(y坐标)
转换指定对象的相对坐标为绝对坐标
Vector3类型的绝对坐标点
Shift:按住可在3D场景下旋转物体角度,点要旋转物体时方向的小球有3个点,代表3个坐标轴的方向,可以固定每次15度角旋转。
常见问题
答:不支持作为底图使用。由于百度地图坐标系的坐标原点的特殊性,我们目前不支持百度地图作为地理底图。如果坐标数据来自于百度地图,数据上传时选择“百度坐标系”,可以与其他的地理底图进行匹配。
答:出现位置偏移,一般是数据与底图采用的坐标系不一致。CityBuilder中,除OSM底图全世界都是WGS84坐标系外,其他底图在国内采用的GCJ02坐标系。
如果数据与OSM匹配,则说明数据现在是WGS84坐标系,在上传数据时您选错了数据源的坐标系,应该选择WGS84
坐标系;
如果都不能匹配且偏移量小,那可能您的数据源是百度坐标系,而在上传时选错了坐标系,应该选择百度坐标系;
如果都不能匹配且偏移量很大,可能是数据源本身的问题,或者坐标经纬度写反了(csv或Excel格式常发生这种情况)。
常见问题
坐标系
坐标系概念
以场景原点为中心的直角坐标系称为世界坐标。
在 ThingJS 中所有的物体的 position 值均为世界坐标,排列为 [x,y,z] 。
世界坐标系
当在场景中创建了园区,在园区下我们放置一个模型,模型是园区的子物体,我们想在园区的坐标系下,设置模型的位置,这时使用的园区的坐标系,就是模型的父物体坐标系。
父物体坐标系
自身坐标系
某对象向前移动 2 米,就是在自身坐标系下设置坐标 [0
控件
position: 相对屏幕坐标的定位位置;
场景工具
拾取坐标
点击“拾取坐标”,弹出“拾取坐标”面板,可在此开启“拾取坐标”功能;
开启“拾取坐标”功能后,在3D容器内点击要获取的位置,“坐标信息”面板将提供该位置的坐标;
鼠标移至需要使用的坐标数组处,单击复制。
全景球数据
// 世界坐标系下的物体坐标
'localPosition':[]// 父物体坐标系下的物体坐标
摄影机
我们可以通过相对于目标物体的坐标系下 x 轴旋转角度、 y 轴旋转角度以及距目标物体“中心”的距离来确定一个位置,作为“看点”的 position 位置。
rotateAround 让摄像机环绕某坐标点(世界坐标系下)或某物体旋转飞行
//环绕的坐标点
通过 target 设置环绕的坐标点;
屏幕坐标与3D世界坐标转换
可通过 worldToScreen() , screenToWorld() 进行 3D 世界坐标和 2D 屏幕坐标的相互转换。
2D 屏幕坐标系以左上角为原点,向右为 X 正向,向下为 Y 正向
//世界坐标系下3D坐标转换成2D屏幕坐标
//分别代表屏幕X坐标、Y坐标、Z深度
//屏幕坐标转3D世界坐标
//传入屏幕坐标
//返回三维坐标
//该坐标为经过摄像机position,target两点的直线 与 世界坐标系下过target点的垂直平面的交点
屏幕坐标转 3D 世界坐标返回的为经过摄像机 position , target 两点的直线与三维世界坐标系下平面的交点,见下图:
园区与层级
在 ThingJS 在线开发中,将“办公楼TMP”下的楼层“挂接”到“办公楼”时,设置楼层的相对坐标。
// 设置相对坐标,楼层相对于建筑的位置保持一致
地图数据
常用坐标系
坐标系
WGS84地理坐标系
目前广泛使用的GPS使用的坐标系
GCJ02 火星坐标系
由中国国家测绘局制订的地理信息系统的坐标系统。是WGS84坐标系经加密后的坐标系。
BD09 百度坐标系
在GCJ02坐标系基础上再次加密。其中bd09ll表示百度经纬度坐标,bd09mc表示百度墨卡托米制坐标
由于百度地图坐标系的坐标原点的特殊性,CityBuilder目前不支持百度地图的瓦片服务。
如果坐标数据来自于百度地图,数据上传时选择“百度坐标系”,可以与其他的地理底图进行匹配。
坐标系-中国区
综合应用
// 设置相对坐标,楼层相对于建筑的位置保持一致
// 设置相对坐标,楼层相对于建筑的位置保持一致
// 设置相对坐标,楼层相对于建筑的位置保持一致
// 设置相对坐标,楼层相对于建筑的位置保持一致
相对关系与坐标转换
坐标转换
之前的教程中已经讲解过了坐标转换,本章不在做多余赘述。
为了让大家更容易理解与使用相对关系与坐标转化,我们新增了一个 示例。
对于一些有摆放规律或者有位置信息的管理对象(比如书柜里的书、楼层里的烟雾感应器、消防喷淋器),我们可以动态的请求数据来进行批量创建。在这种应用场景下创建管理对象时,建议设置对象的父物体、使用相对坐标,以更方便的进行对象的管理和控制。
界面介绍
工具:主要包括场景信息、场景效果、拾取坐标、自定义模型和设置。详细介绍请参照 在线开发 - 菜单导航 - 场景工具。
拾取和选择
//启动框选 传入 鼠标按下时开始框选的屏幕坐标
图层
// 根据经纬度坐标创建一条纯色渲染的线
// 根据两点经纬度坐标创建一条从北京 到 天津 的连线
// 起点 终点 坐标
// 根据经纬度坐标创建一个多边形
地理对象
coordinates: 点的经纬度坐标,坐标格式为[经度
对于GeoPoint类型的物体,通过 moveGeoPath方法可使它沿着经纬度坐标构成的路径移动。
path:为一个由经纬度坐标串构成的路径数组
coordinates: 线的经纬度坐标,由一串点的经纬度坐标组成
coordinates: 线的经纬度坐标,由一串点的经纬度坐标组成
事件
Array Click.pickedPosition 获取拾取点坐标
Array DBLClick.pickedPosition 获取拾取点坐标
Array SingleClick.pickedPosition 获取拾取点坐标
Array MouseUp.pickedPosition 获取拾取点坐标
Array MouseDown.pickedPosition 获取拾取点坐标
Array MouseDown.pickedPosition 获取拾取点坐标
Array MouseMove.pickedPosition 获取拾取点坐标
Array DragStart.pickedPosition 获取拾取点坐标
Array Drag.pickedPosition 获取拾取点坐标
Array DragEnd.pickedPosition 获取拾取点坐标
Array CameraChangeStart.target 摄像机观察点世界坐标信息
Array CameraChangeStart.position 摄像机世界坐标信息
Array CameraChangeEnd.target 摄像机观察点世界坐标信息
Array CameraChangeEnd.position 摄像机世界坐标信息
Array CameraChange.target 摄像机观察点世界坐标信息
Array CameraChange.position 摄像机世界坐标信息
创建对象
angles:设置世界坐标系下三轴旋转角度,例如:angles:[90
90] ,代表在世界坐标系下物体沿X轴旋转90度
scale:设置相对自身坐标系下的缩放比例
position:世界坐标系下位置
localPosition:父物体坐标下的位置
angles:世界坐标系下三轴旋转角度
localAngles:世界父物体坐标系下三轴旋转角度
scale:自身坐标系下三轴缩放量
控制对象
要想控制一个对象物体的空间位置,首先需要理解空间坐标系。
我们使用右手坐标系,但不同于我们平时熟悉的坐标系,平时通常是 z 轴向上,我们使用的坐标系是 y 轴向上,如图:
描述或控制一个物体的位置,我们在不同情况下会分别使用 3 套坐标系统:
世界坐标系
父物体坐标系
自身坐标系
z]位置坐标的单位均为米。
世界坐标系
世界坐标系是系统的绝对坐标系,当场景(注意不是指园区)创建后,在整个场景空间中标绘一个位置,此时场景空间的坐标系就是世界坐标系。
一个物体在世界坐标系下控制物体位置直接使用 position 属性,如:
获取世界坐标系下的物体位置,也直接使用 position 属性,如:
父物体坐标系:
当在场景中创建了园区,在园区下我们放置一个飞机,飞机是园区的子物体,我们想在园区的坐标系下,设置飞机的位置,这时使用的园区的坐标系,就是飞机的父物体坐标系。
再举个例子,我们想给一个人物添加一顶帽子,因为人在场景里位置和方向是不确定的,在世界坐标系下设置帽子的位置,要经过非常复杂的计算。但不管人在哪,面向哪,帽子和人的相对位置是一定的,所以我们在以人为坐标系的情况下就很容易把帽子放到正确的位置。前提是帽子是人的子物体,人的坐标系就是帽子的父物体坐标系
一个物体要在父物体坐标系下设置或获取位置我们使用 localPosition 属性。
自身坐标系:
聪明的你,一定能想到,有时候我们也希望在以自身作为坐标系统下控制,比如,叉车向前走2米,就是在自身坐标系下设置坐标[0
一个物体在自身坐标系下控制位置使用如下接口:
在世界坐标系下,使用 angles 属性来设置或访问旋转信息。
0] //设置世界坐标系Y轴向旋转45角度
在父物体坐标系下,使用 localAngles 属性来设置或访问旋转信息。
0] //设置父物体坐标系Y轴向旋转45角度
在自身坐标系下,使用如下接口方法:
//使用rotate,可输入角度和轴向。设置沿给定轴向转一定角度,传入的旋转轴是自身坐标系下的轴方向
0],该坐标是在世界坐标下
对于缩放,是个 3D 里面比较复杂的概念,我们这里只提供自身坐标系下的缩放控制。
物体自身坐标系的原点,就是这个物体的轴心点(pivot)。
一个物体在世界坐标系和父坐标系下的位置,其实就是物体轴心点在世界坐标系下和父坐标系下的位置,物体在自身坐标系下的旋转和放缩,也是基于轴心点。
物体在世界坐标系下的旋转的正确理解
一个物体在世界坐标系下的坐标位置是 [10
45]。我们该如何理解沿世界坐标系 Z 轴旋转的 45 度呢?
等于先把物体放到世界坐标原点下
将物体沿世界坐标的 Z 轴旋转 45 度
将物体放置到世界坐标系下的 [10
等于先把物体放到世界坐标原点下
将物体放置到世界坐标系下的 [10
将物体沿世界坐标的 Z 轴旋转 45 度
position :在世界坐标系下设置目标位置,关于获取坐标点可使用坐标拾取工具
offsetPosition :在自身坐标系下设置目标位置,和 position 任选其一设置
scale :在自身坐标系下三个轴向目标缩放值
// 路径坐标点数组
// 路径坐标点数组
path :由世界坐标系下的坐标点组成的路径,关于获取坐标点可使用坐标拾取工具
坐标转换
对一个物体我们已经了解针对它的3种坐标系统,可以在不同情况下使用对应方式,很方便地控制或获取物体位置。
但在有些时候,我们需要三套坐标体系坐标的转换,我们使用如下接口:
// 将输入的物体自身坐标系下坐标转换成世界坐标
// 将输入的世界坐标标转换成物体自身坐标系下坐标
// 世界坐标下的位置
0] // 相对于父物体的坐标
此时,“连接” 的一刻,子物体将以设置的相对坐标作为与父物体的相对位置关系,并保持此相对位置关系。
// 世界坐标下的位置
0] // 相对于父物体的坐标
2D/3D界面
offset : 设置自身坐标系下偏移量为[0
offset : 设置自身坐标系下偏移量为[0
使用DOS命令,在D盘根目录下建立一个TEST子目录
建立目录,可以使用mkdir或者md(就是mkdir的简写)命令在D盘根目录建立子目录test,可以用mkdir d:\test或者md d:\test
你甚至可以建立多重目录,比如mkdir d:\test\test2\test3...这样 参考技术A 答案是:输入 MD D:\TEST 解释:MD是建立 D:\是盘符 TEST 目录名字 参考技术B md d:TEST 参考技术C D是!!
以上是关于怎么建立一个3D坐标系,再把3D图放在制备好的3D坐标系的主要内容,如果未能解决你的问题,请参考以下文章
matlab中怎样让3d图中的线刚好在整数坐标上,比如10,20,30..100这些点上
python使用matplotlib可视化3D柱状图(3D bar plot三维柱状图包含三个坐标轴xyz)设置zdir参数为x改变3d图观察的角度
python使用matplotlib可视化3D柱状图(3D histogram三维柱状图包含三个坐标轴xyz)设置zdir参数为z改变3d图观察的角度