## Target类
在Ship类中,还内置了一个Target类。
在SE中摄像头射线扫描、探测器、自动武器等获取目标的手段都是返回一个MyDetectedEntityInfo类型的变量,它里面挂载了目标坐标、射线碰撞点等多个信息,但这些信息的类型比较乱,而且它没有内置的方法来处理这些信息。
因此这里特意封装了一个Target类来储存它,并且在Ship类中扫描、追踪等方法里都统一使用这个类,而不使用默认的MyDetectedEntityInfo。
在Target类中,MyDetectedEntityInfo作为一个成员属性也封装在了里面,在使用的时候非常方便。
这个类比较简单,就不做过多介绍了。
```
//在访问class里的class时,使用这个方法
void Main(){
Ship.Target MyTarget = new Ship.Target();
}
public class Ship
{
public class Target
{
public string Name; //名字
public long EntityId; //唯一ID,当这个值为0可判断该Target是空的
public double Diameter; //半径
public int TimeStamp; //记录时间戳、基于Ship类中的timetick的值来记录
public Vector3D Position;
public Vector3D Velocity;
public Vector3D Acceleration;
public Vector3D HitPosition;
public MatrixD Orientation;
public Vector3D AccurateLockPositionToTarget;
public MyDetectedEntityInfo EntityInfo;
public Target(){
this.EntityId = 0;
this.TimeStamp = 0;
this.EntityInfo = new MyDetectedEntityInfo();
}
public Target(MyDetectedEntityInfo thisEntity){
this.EntityId = thisEntity.EntityId;
this.Name = thisEntity.Name;
this.Diameter = Vector3D.Distance(thisEntity.BoundingBox.Max, thisEntity.BoundingBox.Min)/2;
Vector3D.TryParse(thisEntity.Position.ToString(), out this.Position);
Vector3D.TryParse(thisEntity.Velocity.ToString(), out this.Velocity);
Vector3D.TryParse(thisEntity.HitPosition.ToString(), out this.HitPosition);
this.Acceleration = new Vector3D();
this.Orientation = thisEntity.Orientation;
this.TimeStamp = Ship.timetick;
this.EntityInfo = thisEntity;
}
public void UpdatePhysical(MyDetectedEntityInfo NewInfo){
this.Diameter = Vector3D.Distance(NewInfo.BoundingBox.Max, NewInfo.BoundingBox.Min)/2;
Vector3D.TryParse(NewInfo.Position.ToString(), out this.Position);
Vector3D.TryParse(NewInfo.HitPosition.ToString(), out this.HitPosition);
Vector3D velocity = new Vector3D();
Vector3D.TryParse(NewInfo.Velocity.ToString(), out velocity);
this.Acceleration = (velocity - this.Velocity)*60/(Ship.timetick - this.TimeStamp > 0 ? Ship.timetick - this.TimeStamp : 1);
this.Velocity = velocity;
this.Orientation = NewInfo.Orientation;
this.TimeStamp = Ship.timetick;
this.EntityInfo = NewInfo;
}
public void UpdatePhysical(Target _T){
this.UpdatePhysical(_T.EntityInfo);
}
public bool IsEmpty(){
return this.EntityId == 0;
}
}
}
```
- 序言
- 写在前面的话
- 太空工程师
- MEA小组
- 一、入门
- 1.1 基础概念
- 1.2 编程工具
- 1.3 变量
- 1.4 函数 Function
- 1.5 基本语法
- 1.5.1 运算符
- 1.5.2 if
- 1.5.3 for
- 1.5.4 其他语法
- 1.3 类 Class
- 二、编程块
- 2.1 方块的概念
- 2.2 List<T>结构
- 2.3 获取方块
- 2.4 方块的使用
- 三、Ship 类
- 3.1 简介
- Ship v0.5
- 代码
- 手册(待更新)
- 例子(待更新)
- Ship v1.0
- 代码
- 例子
- 文档
- 实例化
- 内置变量
- 内置方法
- Target类
- 四、运动控制算法在SE中的应用
- 4.1 运动控制介绍
- 4.2 过程控制
- 4.3 震荡和动态误差
- 4.4 误差累加方案
- 4.5 PID算法
- 4.6 对PID算法的一点点简化
- 4.7 一阶惯性系统的PID算法优化的研究
- 五、MEA方块类
- 5.0 核心代码目录
- v1.0核心代码
- v1.1 核心代码
- v2.0 核心代码
- 5.1 类的概念
- 5.2 MEA的方块类(Block)
- 5.3 方块类文档
- 5.4 方块类2.0 全教程
- 5.4.1 安装和使用
- 5.4.2 方块类(Block)
- 5.4.3 显示屏类(DisplayScreen)
- 5.4.4 LCD类(LCD)
- 5.4.5 主控座椅类(Cockpit)
- 六、疯猴的编程笔记
- 第一个程序
- 获取和控制其他块
- 物流与生产
- 界面与通信
- 运动与姿态
- 侦测与导航
- 七、SteamZhou的笔记
- 有趣而花里胡哨的IDEA
- 八、质子对撞炮的笔记
- 属性 Property
- 接口 interface