-3
私は答えがBだと知っていますが、なぜそれが不明なのですか?誰かが答えを見つけたり、シミュレーションを表示したりするプロセスを親切に説明できれば、すばらしいことになります。
ありがとうございます。
私は答えがBだと知っていますが、なぜそれが不明なのですか?誰かが答えを見つけたり、シミュレーションを表示したりするプロセスを親切に説明できれば、すばらしいことになります。
ありがとうございます。
テーブルのボールの軌跡をたどることができます。そのことを容易にする点は、ボールが45°の方向から始まることである。したがって、すべての衝突角は45°になります。したがって、ボールの方向ベクトルの1つのコンポーネントだけを反転する必要があります。
ここにいくつかのC#サンプルコードがあります。座標系の原点は、テーブルの左下隅にあります。ボールの位置は、そのバウンディングボックスで測定された」左下隅:
int ballX = 0;
int ballY = 0;
int ballWidth = 5;
int tableWidth = 230;
int tableHeight = 130;
int directionX = 1;
int directionY = 1;
while(true)
{
//the distances that the ball could travel until it collides with a vertical or horizontal border, respectively
int travelDistanceX, travelDistanceY;
if (directionX > 0)
travelDistanceX = tableWidth - ballWidth - ballX;
else
travelDistanceX = ballX;
if (directionY > 0)
travelDistanceY = tableHeight - ballWidth - ballY;
else
travelDistanceY = ballY;
if(travelDistanceX == travelDistanceY)
{
//we found the target pocket:
Console.WriteLine("Target is located at {0}/{1}.", ballX + travelDistanceX * directionX, ballY + travelDistanceY * directionY);
break;
}
if(travelDistanceX < travelDistanceY)
{
//collision with the vertical borders
ballX += travelDistanceX * directionX;
ballY += travelDistanceX * directionY;
directionX *= -1;
}
else
{
//collision with the horizontal borders
ballX += travelDistanceY * directionX;
ballY += travelDistanceY * directionY;
directionY *= -1;
}
Console.WriteLine("Collision at {0}/{1}.", ballX, ballY);
}
次のパスにコードの結果:(225/125)
で
Collision at 125/125.
Collision at 225/25.
Collision at 200/0.
Collision at 75/125.
Collision at 0/50.
Collision at 50/0.
Collision at 175/125.
Collision at 225/75.
Collision at 150/0.
Collision at 25/125.
Collision at 0/100.
Collision at 100/0.
Target is located at 225/125.
、ポケットには(実際に取得するためにボールの幅を追加します位置)はBです。
あなたはどうなると思いますか?この種の問題を一般的に解決するためのプログラムを作成しない限り、これは物理学の問題です。その場合、できるだけ多くのプログラムを書いて、ここに投稿したいと思っています。 – Teepeemm
私はプログラミングに関するものではないので、この質問をトピックとしてクローズすることに投票しています。 –