代码之家  ›  专栏  ›  技术社区  ›  Raptisoft

如何根据另一个向量的方向调整向量?

  •  0
  • Raptisoft  · 技术社区  · 5 年前

    我正在做一个简单的小游戏/模拟,我想弹起一个球。我试着让球弹得不太现实,但更多的是以一种“游戏宇宙”的方式。

    我要处理这些变量:

    Vector ball_direction; // Direction the ball was moving in prior to impact
    Vector ball_bounce_direction; // New direction of the ball computed from the collided face's normal
    Vector collide_face_normal; // The normal of the collided face
    Vector collide_face_perp; // perpendicular to the normal of the collided face
    Vector gravity; // The gravity of the world-- doesn't really factor in since I want to do this operation based on the collision normal
    

    将球反弹方向乘以碰撞面法向上的0.6。 将球反弹方向乘以碰撞面方向上的1.0。

    有人能告诉我我需要做些什么才能达到这个目的吗?

    2 回复  |  直到 5 年前
        1
  •  1
  •   gct    5 年前

    如果你把点乘看作是“一个向量在另一个向量方向上的大小”,你可以打破 ball_bounce_direction 分成两部分 dot 功能):

    Vector bbd_norm = ball_bounce_direction.dot(collide_face_normal)*ball_bounce_direction;
    Vector bbd_perp = ball_bounce_direction.dot(collide_face_perp)*ball_bounce_direction;
    

    collide_face_* 向量是垂直的,然后可以构建一个新向量:

    ball_bounce_direction = 0.6*bbd_norm + bbd_perp;
    
        2
  •  -1
  •   Dressy Fiddle    5 年前

    如果我理解正确。。。。 你确定你需要使用 vector

    看看这个可以帮助你理解如何计算球的角度和速度: https://gamedev.stackexchange.com/questions/4253/in-pong-how-do-you-calculate-the-balls-direction-when-it-bounces-off-the-paddl