請問這題的範例第一個為什麼是true
秒數允許小數嗎?
請問這題的範例第一個為什麼是true
秒數允許小數嗎?
請問這題的範例第一個為什麼是true
秒數允許小數嗎?
我也因為這樣算錯了...
所以我後來就不管秒數
只用" 點和線 的關係來判斷" 就AC了~
請問這題的範例第一個為什麼是true
秒數允許小數嗎?
我也因為這樣算錯了...
所以我後來就不管秒數
只用" 點和線 的關係來判斷" 就AC了~
詳細的判斷式
if (((y - py) * vx) == ((x - px) * vy)) {
if (abs(x - px) <= abs(t * vx)) {
if (abs(y - py) <= abs(t * vy)) {
if(
(
( dis(x, y, px, py) +
dis(px, py, (x + t * vx), (y + t * vy))
) - dis(0, 0, (t * vx), (t * vy))
) <= TINY
) {
hit = 1; //碰! 撞到了
}
}
}
}
說明如下:
/*
斜率相同 在同一直線上
y - py vy
------- == -----
x - px vx
避免除法,交叉相成
((y - py) * vx) == ((x - px) * vy) ..................條件一
子彈到人的dalta X <= 子彈飛行 t 秒的dalta X
abs(x - px) <= abs(t * vx) ..................條件二
子彈到人的dalta Y <= 子彈飛行 t 秒的dalta Y
abs(y - py) <= abs(t * vy) ..................條件三
終極手段
(distance(起點, 人) + distance(人, 終點)) -----------(1)
distance(起點, 終點) -----------(2)
(1) == (2)
修正浮點數誤差
(1) - (2) <= TINY ..................條件四
*/
請問這題的範例第一個為什麼是true
秒數允許小數嗎?
我也因為這樣算錯了...
所以我後來就不管秒數
只用" 點和線 的關係來判斷" 就AC了~
詳細的判斷式
if (((y - py) * vx) == ((x - px) * vy)) {
if (abs(x - px) <= abs(t * vx)) {
if (abs(y - py) <= abs(t * vy)) {
if(
(
( dis(x, y, px, py) +
dis(px, py, (x + t * vx), (y + t * vy))
) - dis(0, 0, (t * vx), (t * vy))
) <= TINY
) {
hit = 1; //碰! 撞到了
}
}
}
}
說明如下:
/*
斜率相同 在同一直線上
y - py vy
------- == -----
x - px vx
避免除法,交叉相成
((y - py) * vx) == ((x - px) * vy) ..................條件一
子彈到人的dalta X <= 子彈飛行 t 秒的dalta X
abs(x - px) <= abs(t * vx) ..................條件二
子彈到人的dalta Y <= 子彈飛行 t 秒的dalta Y
abs(y - py) <= abs(t * vy) ..................條件三
終極手段
(distance(起點, 人) + distance(人, 終點)) -----------(1)
distance(起點, 終點) -----------(2)
(1) == (2)
修正浮點數誤差
(1) - (2) <= TINY ..................條件四
*/
請問這題的範例第一個為什麼是true
秒數允許小數嗎?
我也因為這樣算錯了...
所以我後來就不管秒數
只用" 點和線 的關係來判斷" 就AC了~
這題並不是什麼浮點數誤差喔
題目本來就有說一定是整數
不過這題按照上面提供的解法會出現錯誤的原因是:
當子彈方向和人與子彈在反方向時就會GG
所以再加個判斷方向的條件即可