衝突時の反射ベクトルを計算するには、法線とは何かを理解する必要があります。幸いなことに、理解するのはそれほど難しくありません。数学が苦手な人のために、私は少し不正確になるので、それについて私を殴らないでください. :)
法線は、サーフェスに対して (90 度の角度で) 直交する単純な単位ベクトル (単位: マグニチュード = 1 を持つ) です。法線は、サーフェスからまっすぐ突き出ている矢印として視覚化できます。壁が傾いていないので、壁の法線を計算するのは簡単です (ここでは画面の左上隅が 0,0 であると仮定します)。
top: (0,1)
bottom: (0,-1)
left: (1,0)
right: (-1,0)
私たちがしなければならないことは、ボールの速度を取得し、ぶつかった壁の法線ベクトルに沿って「反射」することです。反射の式は次のとおりです。
V2 = V1 - 2*N*(N.dot(V1))
ここで、V1 は入射ベクトル (この場合は古い速度)、N はぶつかった壁の法線、V2 は反射ベクトル (新しい速度) です。「N.dot(V1)」は、N と V1 の「内積」であり、(Nx V1.x + Ny V1.y) です。
私たちが行っていることのウィキペディアからの写真 (P は入射ベクトル、Q は反射ベクトル):

疑似コードの全体は次のとおりです。
float nx = 0, ny = 1; // replace these with the normal of the wall you hit
float ix = ball.vx, iy = ball.vy; // incident vector
float dotprod = (nx*ix + ny*iy); // the dot product i mentioned earlier
ball.vx = ix - 2*nx*(dotprod);
ball.vy = iy - 2*ny*(dotprod);
何か不明な点があればお知らせください。:) また、これは壁にとってはやり過ぎですが、ボールとボールの衝突を行うときは法線を計算する必要があるため、完全に無駄ではありません...