作者:朱凯 日期:2017年01月06日
1 结构分析
1.1 类定义
- 冰球类:class Puck
- 球桌类:class Table
- 击球器类:class Hockey_stick
1.2 关键函数
根据以上的类,以及如下需求:
输入:击球器的当前位置和速度(受机器人控制)。 输出:冰球的当前位置和速度。 可以得知关键函数是碰撞检测以及碰撞后的速度计算。其中难点是碰撞检测。
- void check_collision();//检查碰撞
- void update_position();//更新位置
- void update_velocity();//更新速度
2 接口设计
物理引擎是相对独立的一块,只需要向GUI和策略提供简单接口。
2.1 算法接口
- void PuckStep();//更新物理状态
2.2 数据接口
冰球:
- double radius;
- double position[AXIS_COUNT];
- double velocity[AXIS_COUNT];
- double mass; 与common中的参数对应,并且每次将参数传给common中的变量。
球桌:
- double length;
- double width;
- double goalline1;
- double goalline2;
球棍:
- double radius;
- double mass;
- double pre_position[AXIS_COUNT], cur_position[AXIS_COUNT];
-
double velocity[AXIS_COUNT]; 以上为类之中参数。
-
static double default_puck_radius = 0;
-
static double default_puck_mass = 0;
-
static double default_table_length = 0;
-
static double default_table_width = 0;
-
static double default_hockey_stick_radius = 0;
-
static double default_hockey_stick_mass = 0;
-
static double default_goal_length1 = 0;
- static double default_goal_length2 = 0; 以上参数为预设值,其它模块直接可采用。