项目开发日志(其二)

团队开发日志(其二)

遇到的困难

  • 击球点的选择:因为球门是有一个范围的,因此我们用不同的速度和不同的方向击球都会得到不同的结果,我们必须确定一种方法来让机器知道应该如何去选择击球点
  • 轨迹规划:一种是我认为可行的方法,即直接通过折线的运动轨迹来获得最终的速度和方向;一种是李开旭想的,即通过击球器当前位置和最终位置来确定出x,y方向上的加速度,通过匀加速运动来获得一条抛物线,但是其中有个疑惑便是,由于我们之前假定击球之后击球手是不动的,也就是说初速度为0,那么有些情况下便无法得到解,如图所示的情况便是一种情况
    项目开发日志(其二)
    之后李开旭提出一种方案,撞球后,击球手跟随冰球的y轴坐标运动。这个我个人认为也是行不通的,因为你如果跟随冰球y轴运动的话,确实有了y方向的初速度,但是跟随运动本身就会导致击球,那么击球点的选择便无从谈起了。其实在一些情况下你还需要x方向的速度,那么又该如何解决呢?

我做了什么

小组讨论的结果总结在组长的博客里可以看到,我在讨论中给出了自己的确定击球点的方法:

由于冰球和击球器均是有体积的,因此不同的碰撞会导致冰球的返程有不同的角度和速度,但是最终的目的都是将球打进对方的球门,因此,通过数学方法我们是可以计算出在一定范围内的击球点是可以使冰球改变角度,朝向对方球门的。至于如何选择击球点,粗略的想了两种方法,一是产生一个随机数,从而随机确定一个一定能进球的击球点,二是根据对方击球器目前的位置,进而推算出以哪个角度击球可能可以得到最优解。

项目开发日志(其二)

由于第二种方法需要知道对方击球器当前坐标,但是题目给定的输入没有这个值,因此可以采用第一种方法来选择击球点。

组长在之前提出的击球区存在一个弊病,即当球过于靠后接触到击球线,可能会导致无法接到球,如下图所示情况
项目开发日志(其二)
因此必须要加入一个算法选择线来判断球的落点是靠前还是靠后,如果是靠前则采用一种方案(攻击,即考虑进球),如果靠后则采用一种方案(防守,即不考虑如何进球,只考虑把球击回)