如何从线上反弹一点?

epo*_*olf 3 c++ graphics physics

我正在写一个Pong游戏,我遇到了一个问题.

我想弄清楚如何从一条线上弹出一个点.

我能想出的最好的方法是

  • 计算球的当前和未来位置.
    • 线段:{Ball.location,Ball.location + Ball.direction}(Ball.location和Ball.direction使用自定义矢量/坐标类)
  • 计算生成的线段是否与任何墙壁或桨叶相交.
    • ??? 不知道该怎么做(将在一个单独的问题中提问)
  • 在第一个十字路口发现
    • 将球弹出球线
      • 创建一个形成的三角形
        • a = Ball的当前位置
        • b =线的交点.
        • c = Ball在线上当前位置的最近点.
      • 找到球击中线的角度
        • angle = cos(距离(b,c)/距离(a,b))
      • 找到旋转球方向的角度
        • (90度角)*2
      • 旋转Ball的方向并将其移动到新的位置
        • 忽略现在到达线路的距离,不需要完全就行了
  • 否则,如果没有交叉点
    • 将球移动到新的位置.

这是一种可以接受的方法还是我错过了什么?

Bil*_*ard 5

你只需要检查球的中心是否在桨的半径范围内,以判断它是否有反弹的时间.有一个较老的问题,在计算反弹角度时有几个答案.