Example3.4 空中防御体系模型

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

3.4 空中防御系统

在该空中防御系统模型中,所有种类的智能体(轰炸机,雷达,导弹,炸弹以及建筑物)均是在3D连续空间中构建与交互。其中涉及较多种类的空间移动和感应程序。

在该程序中,轰炸机需要轰炸位于特定地区的地面设施,每一架轰炸机均有一个目标。为了完成任务,轰炸机必须在最多2千米的空中距目标的地面距离500米以内扔下炸弹。完成任务后,飞机将以一个更高的高度返回。轰炸机的速度为600Km/h。

目标被地面防御系统保护,包括两部装有地对空导弹的雷达,一部雷达可以同时引导两枚导弹。雷达的防御半径为6.5km,导弹速度为900km/h。导弹在距离飞机300米处爆炸。如果导弹在打到飞机之前飞出了雷达的探测距离,将销毁。

点击菜单栏:文件——新建——模型

模型名称:输入将创建文件名称,此处输入——Air Defense System Model

位置:点击选择你文件需要保存的位置

点击完成,完成模型创建

创建场景

点击左边面板选项卡,演示工具条,点击矩形,拖曳到Main编辑界面,并将矩形左上角顶点置于(0,0)坐标,同时打开矩形属性面板,设置宽度800,高度600,z坐标-1,z高度1,填充颜色下拉菜单中选择纹理——地面(earth),线颜色选择无色,创建仿真的地面。同时名称右边的锁定勾选,使其不可被选中。

从面板选项卡中,点击三维窗口,

拖曳到Main界面,并设置其位置为(0,850),宽度为800,高度为550.位于2D界面的下方

从面板选项卡中,点击视图区域,

拖曳到Main界面,并设置其位置为(0,800),其名称为view3D,标题为3D。同样,再拖曳一个视图区域

到(0,0)坐标,修改名称为view2D,标题为2D。

从面板选项卡中,双击折线,启动绘制模式,在矩形地面中绘制一个封闭区域,确定目标的边界,并命名为:protectedArea

在面板选项卡中,常规工具条,拖曳一个智能体到Main界面,启动智能体生成向导,此处

只需要选择智能体群,不选择模板,名称为Building,智能体数量为10,空间类型为连续,其他的可以直接点击下一步跳过,然后点击完成。

在面板选项卡中,选择三维物体工具条,将三

维模型房子拖到building的编辑界面(0,0)坐

标,并修改其比例为25%。

同时打开building智能体的属性在启动时敲入

代码,设定其初始位置在之前所画的保护区域内。

代码如下:

Point pt= get_Main().protectedArea.randomPointInside(); setXYZ( pt.x, pt.y, 0 );

在Main界面中,创建轰炸机的智能体群,创

建方法和创建地面设施智能体群的方法相同,其名称为:Bomber,初始数量为0。

打开Bomber编辑界面,在面板选项卡中,选

择三维物体工具条,拖曳Bomber到(0,0)点,并在其属性中比例修改为50%。

注意:为了使智能体的动画显示在Main界面

以及运行时出现,均需要在Main界面点击相

应的智能体,在其属性的高级中选上show presentation。

回到Main编辑界面,点击bombers,在属性中找到初始位置,选择特定点选项,这是出现XYZ的坐标输入框,输入(0,0,50)

回到bomber的编辑界面,在属性中找到移动参数,设置其初始速度为100在工程工具条,选择模型名称,在属性中设置模型时间单位为分钟。

回到Bomber编辑界面,拖曳参数到编

辑界面,命名为target,类型为

building。

回到Bomber编辑界面,拖曳参数到编

辑界面,命名为target,类型为

building。

进入行动

moveTo( target.getX(), target.getY(), 18 );

编辑Bomber的状态图。如图所示

进入行动

moveTo( 0, 0, 50 );

行动

get_Main().remove_bombers( this );

回到Main编辑界面,拖曳事件到编辑

界面,命名为assignMission。设置及

代码如下所示。

触发类型为到时。

模式为循环。

代码含义为:检索是否每一个目标都

被一架轰炸机锁定,如果未锁定,就

添加一架轰炸机。

//find asset with no mission assigned

for( Building bldg: buildings ) {

//look up if a bomber is handling it already boolean assigned = false;

for( Bomber bomber: bombers ) {

if( bomber.target== bldg) {

assigned = true;

break;

}

}

//if not -send a bomber

if( ! assigned ) {

add_bombers( bldg);

return;

}

}

我们希望轰炸机沿着某一路线逃逸,此处绘制其逃逸路线。从面板演示中双击折线,启动绘制模式。画出如图所示的折线。

折线命名为escapeRote,颜色为royalblue,线宽为2,Z的坐标为20,z的高度为2,20为逃逸的起始高度,及比例放大后的2KM高度,也是飞机的攻击高度。

注意折线的属性中折线点一栏,后面一些点Z 需要逐渐增大到相对坐标70,及20+70=90,为飞机最终高度。

相关文档
最新文档