作業5.7
編寫一個程式模擬兩個球在一個盒子裡碰撞的情形。我們假設有兩個球在一個寬度為x高度為y的盒子內移動。這兩個球有不同的初始位置,表示為(x1,y1)和(x2,y2)。這兩個球的移動方向為(dx1,dy1)和(dx2,dy2),且移動方向均為45度角,因此所有的dx和dy均為1或-1。球的移動速度是一秒鐘在兩個座標各移動一單位長。例如(x1,y1)且(dx1,dy1)為(-1,1),則一秒後球將移動到(2,5)。 球撞到盒子邊角時會反彈,由於球始終以45度角移動,所以很容易計算路徑。假設(x1,y1)為(3,4),(dx1,dy1)為(-1,1),那麼球的位置將會是(3,4)、(2,5)、(1,6)、(0,7)、(1,8)、(2,7)…等。如果球撞到角落,它會以相反的方向彈回來。 兩個球如果移動到相同的位置則產生碰撞及反彈。假設(x1,y1)為(3,4),(dx1,dy1)為(-1,1),而(x2,y2)為(3,6),(dx2,dy2)為(-1,-1)。第一個球的路徑將會是(3,4)、(2、5)、(1、4)…而第二個球的路徑將會是(3,6)、(2、5)、(1,6)…等。請注意球只要沒移動進相同的位置則不會產生碰撞。 輸入依序為x、y、x1、y1、x2、y2、dx1、dy1、dx2、dy2、t,而t是需要模擬的秒數。輸出是最後這兩個球的位置。順序是x1、y1、x2、y2。 參數規範:0 < x,y < 20,0 < x1,y1 < x,0 < y1,y2 < y, (x1,y1)及(x1,y2)在不同點。
輸入:5 輸入:8 輸入:3 輸入:4 輸入:3 輸入:6 輸入:-1 輸入:1 輸入:-1 輸入:-1 輸入:2 輸出:1 輸出:4 輸出:1 輸出:6
|