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中星球球体的渲染和经纬网格的渲染时分别绘制的.经纬网格的渲染 ...
随机推荐
- numpy练习题
1. 导入numpy库并简写为 np import numpy as np 2. 打印numpy的版本和配置说明 print(np.__version__) print(np.show_config( ...
- 设计模式(19)--Observer(观察者模式)--行为型
作者QQ:1095737364 QQ群:123300273 欢迎加入! 1.模式定义: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图( ...
- BZOJ1802: [Ahoi2009]checker(性质分析 dp)
题意 题目链接 Sol 一个不太容易发现但是又很显然的性质: 如果有两个相邻的红格子,那么第一问答案为0, 第二问可以推 否则第一问答案为偶数格子上的白格子数,第二问答案为偶数格子上的红格子数 #in ...
- JavaScript 数组复制的方法
1.循环 2.Array.from(arr) 3.let arr2 = [...arr]
- Jquery 清除空白字符
$.grep(“jQuery数组”, function(n) { return $.trim(n).length > 0; }); /*仅过滤空数组,不过滤相同数组*/
- JavaSE——多线程实现的两种方式
Thread类: 创建新执行线程有两种方法. 一种方法是将类声明为 Thread 的子类.该子类应重写 Thread 类的 run 方法.接下来可以分配并启动该子类的实例.例如,计算大于某一规定值的质 ...
- JSTL 标签大全详解
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/53311722 冷血之心的博客) 一.JSTL标签介绍 1.什么是 ...
- Oracle 修改SYS、system用户密码
Oracle 修改SYS.system用户密码 by:授客 QQ:1033553122 概念 SYS用户是Oracle中权限最高的用户,而SYSTEM是一个用于数据库管理的用户.在数据库安装完之后,应 ...
- Android--PullToRefreshListView的onRefreshComplete()不起作用的问题
今天用到了网上开源的下拉刷新组件PullToRefreshListView的第三方下拉刷新的ListView 我们发现 有时候我们当使用它的onRefreshComplete()方法是,我们下拉出来的 ...
- Expo大作战(三)--针对已经开发过react native项目开发人员有针对性的介绍了expo,expo的局限性,开发时项目选型注意点等
简要:本系列文章讲会对expo进行全面的介绍,本人从2017年6月份接触expo以来,对expo的研究断断续续,一路走来将近10个月,废话不多说,接下来你看到内容,讲全部来与官网 我猜去全部机翻+个人 ...