团队项目·冰球模拟器——插值算法接口设计

1 需求分析

1.1 插值算法的特征

  • 输出参数(如位移、速度等)是时间的函数。
  • 配置算法参数和触发计算是空间上相互独立的。

1.2 结构模型

根据1.1中的分析,参考《Head First 设计模式》,可以明显地认为这是属于典型的“策略模式”。因此,可以按照策略模式设计接口。

2 接口设计

由于C++的自由度远比Java的高,故可以不完全按Java的设计模式处理实现问题。

2.1 算法接口——Interpolation

1068928-20170102170342909-2001744609.png

2.2 配置接口——InterpolationConfigure

1068928-20170102170833300-713468685.png

3 实现接口

只需要按如下图使用public属性实现接口即可:

1068928-20170102170946253-1632623010.png

4 使用接口

4.1 配置

InterpolationConfigure *new_cmd;                // 定义为配置接口的指针
new_cmd = new TrapezoidInterpolation();         // 设定算法类型
new_cmd->set_time(time);                        // 设定目标时间
new_cmd->set_position(position);                // 设定目标位置
new_cmd->set_velocity(velocity);                // 设定目标速度
new_cmd->set_acceleration(acceleration);        // 设定加速度
new_cmd->set_jerk(jerk);                        // 设定急动度

4.2 触发计算

Interpolation algorithm = ...;                  // 当前算法
algorithm.start(time_now,                       // 初始化,初始时间戳
                start_position,                 // 初始位置
                start_velocity);                // 初始速度

while (1) {
    algorithm.move(time_now);                       // 触发一次运算,提供当前时间戳

    position = algorithm.get_position();            // 返回计算位置
    velocity = algorithm.get_velocity();            // 返回计算速度
    acceleration = algorithm.get_acceleration();    // 返回计算加速度
    jerk = algorithm.get_jerk();                    // 返回计算急动度
}

转载于:https://www.cnblogs.com/passerby233/p/RTCSD_proj_interpolation_design.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值