本发明属于智能船舶辅助驾驶领域,具体涉及一种基于岛屿二维数据绘制三维岛屿模型的方法、装置和系统。
背景技术:
目前对于大中型船舶而言,存在一个较为普遍的缺陷就是在航行过程中存在较多的视野盲区,不利于船舶的航行安全。如果能够实时显示船舶周围海域的岛屿图像,那么将有助于操作人员及时作出正确的操作指令。
现有的船舶仿真驾驶系统是预先在3d建模软件上建立好岛屿模型,使用过程中加载建好的岛屿模型,属于静态加载,非实时绘制。因此船舶仿真驾驶系统只能实现有限范围内的岛屿模型加载,当建模范围增大时,会产生大量数据,影响模型加载的效率,故实现加载所有航行海域内的岛屿模型是不现实的。
综上所述所述,现有方法计算过程产生数据量大,不能实现任意航行海域内的岛屿模型的实时加载。
技术实现要素:
(一)要解决的技术问题
为了解决上述问题,本申请提出了一种基于岛屿二维数据绘制三维岛屿模型的方法、装置和系统。
(二)技术方案
为了达到上述目的,本发明采用的主要技术方案包括:
一种基于岛屿二维数据绘制三维岛屿模型的方法,该方法包括:
步骤s10、获取目标岛屿的由二维点组成的轮廓信息,所述轮廓信息包括所述目标岛屿的轮廓线上各点的经度数据和纬度数据;
步骤s20、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成所述目标岛屿的底面轮廓线上各点的三维数据;
步骤s30、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成所述目标岛屿的顶面轮廓线上各点三维数据;
步骤s40、将所述目标岛屿底面和顶面的轮廓线上各点的三维数据作为所述目标岛屿侧面相应各点的三维数据;
步骤s50、将所述目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于所述三维岛屿模型各点的三维数据绘制所述三维岛屿模型。
作为本发明方法的一种改进,所述步骤s50之前还包括:
步骤s41、分别将所述目标岛屿的底面轮廓线上的点作为第一端点,将所述第一端点对应的所述目标岛屿的顶面轮廓线上的点作为第二端点;
步骤s42、分别基于所述第二端点生成相应的控制点;
步骤s43、分别基于第一端点、相应的第二端点和控制点,通过曲线生成公式生成所述目标岛屿的侧面上第一端点和第二端点之间曲线上各点的三维数据。
作为本发明方法的一种改进,所述曲线生成公式为二阶贝塞尔曲线公式,所述二阶贝塞尔曲线公式具体为:
b(tn)=(1-tn)2p0 2tn(1-tn)p1 tn2p2
其中,p0为第一端点,p1为控制点,p2为第二端点,tn为系数,n为t的取值个数,即第一端点与第二端点生成的点的个数。
作为本发明方法的一种改进,在n确定的情况下,通过曲线生成公式生成所述目标岛屿的侧面上第一端点和第二端点之间曲线上各点的三维数据时,各点系数取值计算方法为:
其中,tk为各点系数,k的取值为{k|1≤k≤n,k∈n}。
作为本发明方法的一种改进,所述控制点与所述第二端点在同一水平面内。
作为本发明方法的一种改进,在步骤s10之前,还包括:
步骤s01、获取目标船舶的位置信息,所述位置信息包括所述目标船舶的经度数据、纬度数据;
步骤s02、根据所述位置信息,从预先存储的电子海图中获取所述目标船舶周围预设海域内的每个岛屿分别作为目标岛屿。
作为本发明方法的一种改进,步骤s50中“绘制所述三维岛屿模型”,包括:采用基于opengl的三维图形绘制软件绘制所述三维岛屿模型。
作为本发明方法的一种改进,步骤s50中的“绘制所述三维岛屿模型”,具体包括:
采用三角化方式绘制所述三维岛屿模型的侧面;
采用网格化方式绘制所述三维岛屿模型的顶面;
其中,网格化方式绘制包括:
创建分格化对象,
注册回调函数,
设置分格化的属性值,
开始绘制多边形,
结束多边形绘制,
删除分格化对象。
本发明第二方面提出了一种基于岛屿二维数据绘制三维岛屿模型的装置,该装置包括:轮廓信息获取模块、底面三维数据生成模块、顶面三维数据生成模块、侧面三维数据获取模块、三维岛屿模型获取模块;
所述轮廓信息获取模块,配置为获取目标岛屿的由二维点组成的轮廓信息,所述轮廓信息包括所述目标岛屿的轮廓线上各点的经度数据和纬度数据;
所述底面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成所述目标岛屿的底面轮廓线上各点的三维数据;
所述顶面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成所述目标岛屿的顶面轮廓线上各点三维数据;
所述侧面三维数据获取模块,配置为将所述目标岛屿底面和顶面的轮廓线上各点的三维数据作为所述目标岛屿侧面相应各点的三维数据;
所述三维岛屿模型获取模块,配置为将所述目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于所述三维岛屿模型各点的三维数据绘制所述三维岛屿模型。
本发明第三方面提出了一种船舶仿真驾驶系统,该系统包括上述的基于岛屿二维数据绘制三维岛屿模型的装置。
(三)有益效果
本申请的有益效果是:本发明方法基于岛屿的二维数据实时生成岛屿的三维数据,并绘制三维岛屿模型。本发明方法计算过程数据量小,在智能船舶辅助驾驶中可实时加载船舶周围的岛屿模型;并且通过贝塞尔曲线公式生成岛屿侧面上各点的三维数据,可使绘制出的三维场景画面更具真实感,观察效果更佳,从而为保证船舶安全航行提供更多的选择。
附图说明
本发明借助于以下附图进行描述:
图1为本发明具体实施方式中的基于岛屿二维数据绘制三维岛屿模型的方法流程示意图;
图2为本发明具体实施方式中的基于岛屿二维数据绘制三维岛屿模型的方法实施例的流程示意图;
图3为本发明具体实施方式中的岛屿侧面采用三角化绘制方式绘制示例图;
图4为本发明具体实施方式中的基于青岛港二维数据绘制三维岛屿模型示例图;
图5为本发明具体实施方式中的基于青岛银海码头二维数据绘制三维岛屿模型示例图。
具体实施方式
为了更好的解释本发明,以便于理解,下面结合附图,通过具体实施方式,对本发明作详细描述。
术语“第一”、“第二”等是用于区别类似的对象,而不是用于描述或表示特定的顺序或先后次序。
本发明提出的基于岛屿二维数据绘制三维岛屿模型的方法根据船舶位置实时绘制周围岛屿,将真实的环境信息在3d界面绘制出来,如图1所示,包括以下步骤:
步骤s10、获取目标岛屿的由二维点组成的轮廓信息,轮廓信息包括目标岛屿的轮廓线上各点的经度数据和纬度数据;
步骤s20、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成目标岛屿的底面轮廓线上各点的三维数据;
步骤s30、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成目标岛屿的顶面轮廓线上各点三维数据;
步骤s40、将目标岛屿底面和顶面的轮廓线上各点的三维数据作为目标岛屿侧面相应各点的三维数据;
步骤s50、将目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于三维岛屿模型各点的三维数据绘制三维岛屿模型。
为了便于理解本发明方法提供一个实施例,对本发明方法中的各步骤进行详细说明。
为提高船舶航行的安全性,本实施例提出了一种应用于智能船舶辅助驾驶系统实时绘制岛屿的实现方法,该技术在智能船舶辅助驾驶系统中的3d界面实现。通过该方法可实现将船舶周围的岛屿实时地在屏幕中绘制出来,加上对自身船舶的精准建模,可实现将船舶在当前海域中的航行情况在屏幕中实时展现出来。相对于电子海图,该方法是三维绘制,更具真实感,观察效果更佳,为保证船舶安全航行提供更多的选择。
请参阅图2,图2为本发明具体实施方式中的基于岛屿二维数据绘制三维岛屿模型的方法实施例的流程示意图。
本发明实施例的一种基于岛屿二维数据绘制三维岛屿模型的方法包括:
s100、获取目标船舶的gps信息,即船舶的经纬度数据。
s200、根据目标船舶的经纬度数据,从电子海图中提取距目标船舶给定范围内的岛屿的轮廓信息,即该范围内岛屿的经纬度数据。
s300、岛屿的轮廓是由多个二维点组成的,需要将二维点的经纬度数据转换为绘制岛屿所需的三维数据。具体操作如下:
s310、屏幕中心为坐标原点,x轴正方向平行于屏幕水平向右,y轴正方向平行于屏幕竖直向上,z轴正方向垂直于屏幕向外;将每一个点的经度值作为x值,纬度作为z值,添加y值,这里y值的取值需要统一,使其保持在同一水平面上。
s320、转换后的数据绘制出来仍只是平面图,并不具备三维岛屿的高度属性,所以需要虚构岛屿的顶面顶点数据。以经转化后数据坐标为(x,y,z)的某一顶点为例,相应的虚构的岛屿顶面的顶点数据为(x,y value1,z),每一个真实的顶点数据都对应一个虚拟的顶面顶点数据。value1可根据实际绘制情况调整大小。至此,绘制岛屿所需的上下面轮廓的顶点数据确定完成。
s400、通过已有的三维数据点借助贝塞尔曲线公式生成绘制曲面岛屿所需的数据,曲线公式如公式(1)所示。
b(tn)=(1-tn)2p0 2tn(1-tn)p1 tn2p2(1)
其中,p0为第一端点,p1为控制点,p2为,tn为系数,n为第一端点与第二端点生成的点的个数。n为正整数,n的取值范围为大于等于1。
在n确定的情况下,通过曲线生成公式生成目标岛屿的侧面上第一端点和第二端点之间曲线上各点的三维数据时,各点系数取值根据公式(2)计算得到。
其中,tk为各点系数,k的取值为{k|1≤k≤n,k∈n}。
tk可以取[0,1]内的任意数,具体数值与n有关,t取0时,生成的点为p0,t取1时,生成的点为p2,因为p0与p2点的坐标已知,故无需再通过贝塞尔曲线生成端点值,所以实际计算中t的取值范围为(0,1)。例如:当n取1时,1/(n 1)=0.5,则t1=0.5;当n取3时,1/(n 1)=0.25,则t1=0.25,t2=0.5,t3=0.75;以此类推,n的取值尽量符合1/(n 1)除尽的原则,如n取2时,则无法除尽,此时保留小数后的有效精确位数即可。即tk的取值是由n决定的。
通过选取控制点p1来生成绘制曲面岛屿所需的数据。例如将顶点(x,y,z)设为第一端点p0,将顶点(x,y value1,z)设为第二端点p2,控制点p1选为为(x value2,y value1,z),其中value1与value2的大小可根据实际需要取值,通过该公式可在p0与p2间生成任意数量的坐标点,若将这些坐标点按照y值的大小依次连接,连接后的效果为一条曲线,并且生成的坐标点越多则绘制出的曲线效果越好。
生成的曲线的为二维曲线,曲线上各点的坐标值计算方法为:
x轴坐标值是通过将p0、p1、p2的x轴坐标值代入公式(1)计算得到;
y轴坐标值是通过将p0、p1、p2的y轴坐标值代入公式(1)计算得到;
z轴坐标值与p0、p1、p2的z轴坐标值相等。
s500、利用生成的三维数据绘制曲面岛屿。具体操作如下:
s510、将岛屿的绘制过程分为两部分,一部分是岛屿侧面的绘制,另一部分是岛屿顶面的绘制。
采用基于opengl的三维图形绘制软件绘制三维岛屿模型。opengl是用于渲染2d,3d矢量图形的跨语言、跨平台的应用程序编程接口,该接口由350多个不同的函数调用组成,可实现多种图形的绘制。但是opengl默认绘制凸多边形,认为凹多边形是非法多边形,当绘制凹多边形时,opengl会进行自动填充,导致多边形轮廓发生变化,绘制出的岛屿轮廓大小与岛屿实际的轮廓不一致。故需要先经过网格化处理(调用glu网格化函数),将凹多边形分为无数个三角形,然后调用opengl函数实现绘制。
s520、岛屿的侧面的采用三角化绘制方式,岛屿侧面可实现正常绘制。请参阅图3,图3为本发明具体实施方式中的岛屿侧面采用三角化绘制方式绘制示例图。图3中v0、v2、v4为目标岛屿底面轮廓线上相邻的三个点,v1、v3、v5为目标岛屿顶面轮廓线上相邻的三个点。三角化绘制流程为:v0是第一个顶点,v1是第二个顶点,v2是第三个顶点,前三个顶点绘制出第一个三角形,v3作为第四个顶点,v1、v2、v3组成第二个三角形,v4作为第五个顶点,v2、v3、v4组成第三个三角形,v5作为第六个顶点,v3,v4、v5组成第四个三角形,即每添加一个顶点则与前两个顶点组成新的三角形。
s530、岛屿顶面采用网格化对象方式进行岛屿顶面的绘制,绘制过程如下:
调用glunewtess()函数创建分格化对象;
调用glutesscallback()函数注册相关回调函数;
调用glutessproperty()函数设置分格化的属性值;
调用glutessbeginpolygon()函数开始绘制多边形;
调用glutessednpolygon()函数结束多边形绘制;
调用gludeletetess()函数删除分格化对象。
请参阅图4和图5,图4为本发明具体实施方式中的基于青岛港二维数据绘制三维岛屿模型示例图,图5为本发明具体实施方式中的基于青岛银海码头二维数据绘制三维岛屿模型示例图。图4中(a)为从电子海图中提取的青岛港轮廓信息,绘制出的岛屿三维模型俯视图,图4中(b)为从电子海图中提取的青岛港轮廓信息,绘制出的目标船舶视角中的岛屿三维模型。图5中(a)为从电子海图中提取的青岛银海码头港轮廓信息,绘制出的目标船舶视角中的岛屿三维模型,图4中(b)为从电子海图中提取的青岛银海码头轮廓信息,绘制出的岛屿三维模型俯视图。
本发明方法将二维经纬度数据转化为岛屿绘制所需的三维数据,将岛屿模型的绘制分成两部分,顶面采用网格化方式绘制,岛屿侧面采用三角化方式绘制,实现了根据船舶经纬度位置实时绘制周围岛屿,具备跟随性、实时性。
本发明实施例的一种基于岛屿二维数据绘制三维岛屿模型的装置,该装置包括:轮廓信息获取模块、底面三维数据生成模块、顶面三维数据生成模块、侧面三维数据获取模块、三维岛屿模型获取模块;
轮廓信息获取模块,配置为获取目标岛屿的由二维点组成的轮廓信息,轮廓信息包括目标岛屿的轮廓线上各点的经度数据和纬度数据;
底面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成所述目标岛屿的底面轮廓线上各点的三维数据;
顶面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成所述目标岛屿的顶面轮廓线上各点三维数据;
侧面三维数据获取模块,配置为将目标岛屿底面和顶面的轮廓线上各点的三维数据作为目标岛屿侧面相应各点的三维数据;
三维岛屿模型获取模块,配置为将目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于三维岛屿模型各点的三维数据绘制三维岛屿模型。
本发明实施例的一种船舶仿真驾驶系统,该系统包括上述的基于岛屿二维数据绘制三维岛屿模型的装置。
需要说明的是,上述实施例提供的基于岛屿二维数据绘制三维岛屿模型的装置,仅以上述各功能模块的划分进行举例说明,在实际应用中,可以根据需要而将上述功能分配由不同的功能模块来完成,即将本发明实施例中的模块或者步骤再分解或者组合,例如,上述实施例的模块可以合并为一个模块,也可以进一步拆分成多个子模块,以完成以上描述的全部或者部分功能。对于本发明实施例中涉及的模块、步骤的名称,仅仅是为了区分各个模块或者步骤,不视为对本发明的不当限定。
所属技术领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的装置的具体工作过程及有关说明,可以参考前述方法实施例中的对应过程,在此不再赘述。
需要理解的是,以上对本发明的具体实施例进行的描述只是为了说明本发明的技术路线和特点,其目的在于让本领域内的技术人员能够了解本发明的内容并据以实施,但本发明并不限于上述特定实施方式。凡是在本发明权利要求的范围内做出的各种变化或修饰,都应涵盖在本发明的保护范围内。
1.一种基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,该方法包括:
步骤s10、获取目标岛屿的由二维点组成的轮廓信息,所述轮廓信息包括所述目标岛屿的轮廓线上各点的经度数据和纬度数据;
步骤s20、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成所述目标岛屿的底面轮廓线上各点的三维数据;
步骤s30、基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成所述目标岛屿的顶面轮廓线上各点三维数据;
步骤s40、将所述目标岛屿底面和顶面的轮廓线上各点的三维数据作为所述目标岛屿侧面相应各点的三维数据;
步骤s50、将所述目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于所述三维岛屿模型各点的三维数据绘制所述三维岛屿模型。
2.根据权利要求1所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,所述步骤s50之前还包括:
步骤s41、分别将所述目标岛屿的底面轮廓线上的点作为第一端点,将所述第一端点对应的所述目标岛屿的顶面轮廓线上的点作为第二端点;
步骤s42、分别基于所述第二端点生成相应的控制点;
步骤s43、分别基于第一端点、相应的第二端点和控制点,通过曲线生成公式生成所述目标岛屿的侧面上第一端点和第二端点之间曲线上各点的三维数据。
3.根据权利要求2所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,所述曲线生成公式为二阶贝塞尔曲线公式,所述二阶贝塞尔曲线公式具体为:
b(tn)=(1-tn)2p0 2tn(1-tn)p1 tn2p2
其中,p0为第一端点,p1为控制点,p2为第二端点,tn为系数,n为t的取值个数,即第一端点与第二端点生成的点的个数。
4.根据权利要求3所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,在n确定的情况下,通过曲线生成公式生成所述目标岛屿的侧面上第一端点和第二端点之间曲线上各点的三维数据时,各点系数取值计算方法为:
其中,tk为各点系数,k的取值为{k|1≤k≤n,k∈n}。
5.根据权利要求2所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,所述控制点与所述第二端点在同一水平面内。
6.根据权利要求1-5中任一权利要求所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,在步骤s10之前,还包括:
步骤s01、获取目标船舶的位置信息,所述位置信息包括所述目标船舶的经度数据、纬度数据;
步骤s02、根据所述位置信息,从预先存储的电子海图中获取所述目标船舶周围预设海域内的每个岛屿分别作为目标岛屿。
7.根据权利要求1-5中任一权利要求所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,步骤s50中“绘制所述三维岛屿模型”,包括:采用基于opengl的三维图形绘制软件绘制所述三维岛屿模型。
8.根据权利要求7所述的基于岛屿二维数据绘制三维岛屿模型的方法,其特征在于,步骤s50中的“绘制所述三维岛屿模型”,具体包括:
采用三角化方式绘制所述三维岛屿模型的侧面;
采用网格化方式绘制所述三维岛屿模型的顶面,
其中,网格化方式绘制包括:
创建分格化对象,
注册回调函数,
设置分格化的属性值,
开始绘制多边形,
结束多边形绘制,
删除分格化对象。
9.一种基于岛屿二维数据绘制三维岛屿模型的装置,其特征在于,该装置包括:轮廓信息获取模块、底面三维数据生成模块、顶面三维数据生成模块、侧面三维数据获取模块、三维岛屿模型获取模块;
所述轮廓信息获取模块,配置为获取目标岛屿的由二维点组成的轮廓信息,所述轮廓信息包括所述目标岛屿的轮廓线上各点的经度数据和纬度数据;
所述底面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第一高度数据生成所述目标岛屿的底面轮廓线上各点的三维数据;
所述顶面三维数据生成模块,配置为基于轮廓线上各点的经度数据和纬度数据,分别添加预设的第二高度数据生成所述目标岛屿的顶面轮廓线上各点三维数据;
所述侧面三维数据获取模块,配置为将所述目标岛屿底面和顶面的轮廓线上各点的三维数据作为所述目标岛屿侧面相应各点的三维数据;
所述三维岛屿模型获取模块,配置为将所述目标岛屿的底面轮廓线上各点三维数据、顶面轮廓线上各点三维数据和侧面各点的三维数据转换为三维岛屿模型相应各点的三维数据,基于所述三维岛屿模型各点的三维数据绘制所述三维岛屿模型。
10.一种船舶仿真驾驶系统,其特征在于,该系统包括根据权利要求9所述的基于岛屿二维数据绘制三维岛屿模型的装置。
技术总结