物理引擎接口

作者:朱凯 日期: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; 以上参数为预设值,其它模块直接可采用。
原文地址:https://www.cnblogs.com/zhukkkk/p/6257076.html