本來今天沒有要寫日記的,但是因為有點閒加上我真的真的很好奇這個問題,所以決定發一篇
我們要設計一個函數,來判定籃球投進籃框的拋物線
題目:
已知人物座標(x1, y1, z1)、籃框座標(x2, y2, z2)與常數△y、重力加速度g,求初速度V = u|v0| = (ux, uy, uz) * |V0|,使得(Vx, Vy, Vz) = a * (x2 - x1, y2 + △y - y1, z2 - z1),a > 0
問題解釋:
如上圖,在斜拋運動中,我們利用一個額外的高度,對著那個方向給一個初速度V0,當他落下時正好通過籃框,則那個V0應該是唯一的,因為只要初速度太高,就會飛過頭,太低則會掉落
條件應該會是充足並有不多於一個解,只要這些值都是現實生活的值,並且△y不會太小,就會有解,因此應該可以知道這會是有唯一解的題目
我的想法:
因為我們已經規定了初速度方向,因此將該方向標準化後,就可以得到(ux, uy, uz)了,接著只要找出|v0|這個初速率的純量即可
我們能用x和z算出水平距離(如圖),用小學的速度 * 時間 = 距離,可以得到V的水平分量Vxz 乘上時間 t 應該會得到該水平距離
sqrt((x2-x1)^2 + (z2-z1)^2) = Vxz * t = ((|V0|ux)^2 + (|V0|uz)^2) * t ----(1)
接著我們用V的垂直分量Vy來計算,用△x = V0 * t + 1/2 * a * t^2,其中總位移應該剛好等於籃框高度
y2 - y1 = |V0|uy * t + 1/2 * (-g) * t^2 -----(2)
聯立(1)和(2),未知數有|V0|與t,等式有兩條,且以現實情況考慮t > 0、|V0| > 0
並且應該可以想像的到t與|V0|是存在的,並且我們只要|V0|,不需要t
但是我和另一個碩士的學霸學長怎麼樣都找不出一個通解,或是求出公式了但是答案卻是錯的(用電腦算),最糟的是我們甚至簡化過程用了不同方式還會得到不同的公式。
我用的是國中等級的算法,他用的是高中等級的三角函數(可能有用到arctan啦,但是是電腦算也不是我們算),即使如此,我們仍是得不到能用的通解公式
雖然我是不太覺得PO在這邊可以得到答案啦,不過就當作紀念,紀念這個難題浪費了兩個理工強者一個趕工final的晚上,有興趣的過路人,也不妨貢獻你們的雙手算算看吧