WorldWind源码剖析系列:数学引擎类MathEngine
PluginSDK中的MathEngine类是密封类。不可继承,主要完成通用的数学计算功能。由于按平面展开层层划分,所以在WW里用到一个row,col的概念,类MathEngine封装了从行/列到经/纬度值的转换,这也是WW进行纹理贴图的依据。划分后的每个方格对应一块512X512的,对应Level的纹理,有了这些信息,再加上高度值就可以实时渲染三维图像。其类图如下。

其中,该类没有字段和属性成员,只有方法成员,都是静态成员。
Azimuth方法用于计算从A点(latA,lonA)到B点(latB,lonB)的方位角。
SphericalToCartesian方法用于将位置点的球面坐标转换为空间笛卡尔坐标。输入角度以度为单位。其重载形式输入角度为Angle对象,以弧度为单位。返回Microsoft.DirectX. Vector3三维向量对象,以弧度为单位。
SphericalToCartesianD方法用于将位置点的球面坐标转换为空间笛卡尔坐标。输入角度为Angle对象,以弧度为单位。返回WorldWind. Point3d三维点对象。
CartesianToSpherical方法用于将位置点的空间笛卡尔坐标转换为球面坐标。返回Microsoft.DirectX. Vector3三维向量对象,以弧度为单位。
CartesianToSphericalD方法用于将位置点的空间笛卡尔坐标转换为球面坐标。返回WorldWind. Point3d三维点对象。
DegreesToRadians和RadiansToDegrees方法用于实现角度和弧度之间的转换。
DistancePlaneToPoint方法用于计算点到平面的距离。
Hypot方法用于计算
EulerToQuaternion方法用于将由航偏角、俯仰角和横滚角组成的欧拉集合转换为一个Microsoft.DirectX. Quaternion四元数结构体对象输出。
QuaternionToEuler方法功能则相反。返回Microsoft.DirectX. Vector3三维向量对象,以弧度为单位。
SphericalDistance方法用于计算球面两点之间的球面角度距离。输入参数为Angle对象,返回Angle对象,以弧度为单位。
SphericalDistanceDegrees方法也用于计算球面两点之间的球面角度距离。输入参数为double类型,返回double类型,以度为单位。
GetColFromLongitude方法用于将给定的经度值按照给定的瓦片划分大小计算其所在的格网列号。其有两种重载形式,输入参数分别以度/弧度为单位。
GetRowFromLatitude方法用于将给定的维度值按照给定的瓦片划分大小计算其所在的格网行号。其有两种重载形式,输入参数分别以度/弧度为单位。
WorldWind构建的地球模型经度范围为[-180,180],经度范围为[-90,90]。瓦片格网行格网行列号索引从1开始,而不是从0开始。
WorldWind源码剖析系列:数学引擎类MathEngine的更多相关文章
- WorldWind源码剖析系列:角度类Angle
PluginSDK中的角度结构体Angle类图如下所示. 角度结构体主要定义了一个弧度表示角度值的字段:double Radians.还有几个表示角度最大值.最小值.非数值和零角度等字段.定义了一个D ...
- WorldWind源码剖析系列:挂件类Widgets
WorldWindow用户定制控件类中所包含的的挂件类Widgets控件主要有如下图所示的派生类.它们的类图如下所示. 鉴于挂件类Widgets及其派生类,相对简单,基本上都是些利用DirectX3D ...
- WorldWind源码剖析系列:设置类SettingsBase
PluginSDK中的星球设置类WorldSettings 和WorldWind.程序设置类WorldWindSettings均继承自父类SettingsBase.类图如下所示.其中父类Setting ...
- WorldWind源码剖析系列:BMNG类构造函数深入分析
BMNG构造函数深入分析 一.主要类图 二.主要功能: 1) BMNG类 BMNG类将包含以“Blue Marble”为主题的所有可渲染影像的根节点添加到当前星球的可渲染对象列表中,包括 ...
- WorldWind源码剖析系列:插件类Plugin、插件信息类PluginInfo和插件编译器类PluginCompiler
插件类Plugin是所有由插件编译器加载的插件子类的抽象父类,提供对插件的轻量级的访问控制功能. 插件信息类PluginInfo用来存储关于某个插件的信息的类,可以理解为对插件类Plugin类的进一步 ...
- WorldWind源码剖析系列:日志类Log
Utility工程中的日志类Log主要用来输出Debug状态下的调试信息.该类的类图如下: 日志类Log中使用到的类和内嵌结构体类型主要有以下这些: public class LogEventArgs ...
- WorldWind源码剖析系列:相机类CameraBase
相机基类CameraBase PluginSDK中的相机类CameraBase是三维计算机图形学中的概念.观察者在三维场景中漫游时,通过眼睛看到的场景和相机拍摄过程非常一致.实际上,Direct3D和 ...
- WorldWind源码剖析系列:缓冲类Cache
缓冲类Cache主要用于在最小的限制条件下保存从远程服务器通过网络下载下来的地理空间数据,以便当用户处于离线状态时能够使用这些已经缓冲好的数据.Google Earth也采用类似机制处理用户离线浏览漫 ...
- WorldWind源码剖析系列:四元数类Quaternion
PluginSDK中的Quaternion4d类可能是感觉Microsoft.DirectX. Quaternion类不太实用或不够用,自己有重新写的. 四元数是英国数学家哈密顿(W.R.Hamilt ...
- WorldWind源码剖析系列:星球类World
星球类World代表通用的星球类,因为可能需要绘制除地球之外的其它星球,如月球.火星等.该类的类图如下. 需要说明的是,在WorldWind中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
随机推荐
- 【Winform系列】Winform控件DataGridView添加数据的几种方式
1:直接添加 在控件中设置好每列的名称 例如: DataGridViewRow row = new DataGridViewRow(); int j = dgv.Rows.Add(row); dgv. ...
- Three.js开发指南---创建,加载高级网格和几何体(第八章)
本章的主要内容: 一, 通过Three.js自带的功能来组合和合并已有的几何体,创建出新的几何体 二, 从外部资源中加载网格和几何体 1 前面的章节中,我们学习到,一个几何体创建的网格,想使用多个材质 ...
- JConsole连接远程linux服务器配置
1.在远程机的tomcat的catalina.sh中加入配置 (catalina.sh路径在tomcat/bin下面 如/usr/local/tomcat/bin) if [ "$1&quo ...
- PHP实现批量删除(封装)
前台 <!DOCTYPE html> <html> <head> <title>批量删除</title> </head> < ...
- github 账号创建
1.注册 注册地址: https://github.com/join?source=header-home 2.建立组织 (1)点击头像旁边的"+",选择New organiz ...
- jsonp 实现跨域
为什么会出现跨域问题 跨域的安全限制都是对浏览器端来说的,服务器端是不存在跨域安全限制的. 浏览器的同源策略限制从一个源加载的文档或脚本与来自另一个源的资源进行交互. 如果协议,端口和主机对于两个页面 ...
- [SDOI2010]猪国杀
题面 (这个做题面的大佬太赞啦) 无聊啊~~~然后就写大模拟,然后就从早上写到下午,生活得到了极大的充实 注意事项: 牌库为空之后再抽牌,会重复抽最后一张被抽走牌 无论在任何过程中,游戏结束(主公死或 ...
- 优雅高效的免费在线APP原型工具
前往:xiaopiu 打开浏览器即可享受软件级的流畅体验!云端组件库.交互动效自定义.高效友好的操作方式让您的创意即刻呈现!
- centos安装lamp
http://bbs.qcloud.com/thread-1316-1-1.html 启动MySQL http://www.cnblogs.com/starof/p/4680083.html 修改密码 ...
- tilestache + mbutil应用
1. 安装pip. 我们同样需要在Python的官网上去下载,下载地址是: https://pypi.python.org/pypi/pip#downloads 2. 解压. 解压pip-9.0.1. ...