#82: 問


sa411022 (sa411022)

學校 : 國立臺中第二高級中學
編號 : 1027
來源 : [140.113.93.37]
最後登入時間 :
2010-04-05 21:52:41
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [61.66.76.57] | 發表日期 : 2007-12-22 09:36

請問這題的範例第一個為什麼是true

秒數允許小數嗎?

 
#86: Re:問


looser (looser)

學校 : 不指定學校
編號 : 1031
來源 : [122.121.26.214]
最後登入時間 :
2008-11-01 03:37:57
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [220.129.64.228] | 發表日期 : 2007-12-26 07:49

請問這題的範例第一個為什麼是true

秒數允許小數嗎?



秒數是整數...第一個會true表示子彈打到玩家  0 3 0 -2 這個子彈會打到玩加 因為2秒後將從(0,3)移到(0,-1). 
#2671: Re:問


xatier (一串電研的阿飄先生)

學校 : 國立臺中第一高級中學
編號 : 4282
來源 : [140.113.17.175]
最後登入時間 :
2014-12-09 21:57:44
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [210.60.107.233] | 發表日期 : 2009-11-13 13:05

請問這題的範例第一個為什麼是true

秒數允許小數嗎?


我也因為這樣算錯了...

所以我後來就不管秒數

只用" 點和線 的關係來判斷" 就AC了~

 
#2672: Re:問


xatier (一串電研的阿飄先生)

學校 : 國立臺中第一高級中學
編號 : 4282
來源 : [140.113.17.175]
最後登入時間 :
2014-12-09 21:57:44
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [210.60.107.233] | 發表日期 : 2009-11-13 13:07

請問這題的範例第一個為什麼是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                                 ..................條件四

*/

 

 
#2673: Re:問


xatier (一串電研的阿飄先生)

學校 : 國立臺中第一高級中學
編號 : 4282
來源 : [140.113.17.175]
最後登入時間 :
2014-12-09 21:57:44
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [210.60.107.233] | 發表日期 : 2009-11-13 13:07

請問這題的範例第一個為什麼是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                                 ..................條件四

*/

 

 
#2674: Re:問


xatier (一串電研的阿飄先生)

學校 : 國立臺中第一高級中學
編號 : 4282
來源 : [140.113.17.175]
最後登入時間 :
2014-12-09 21:57:44
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [210.60.107.233] | 發表日期 : 2009-11-13 13:07

請問這題的範例第一個為什麼是true

秒數允許小數嗎?


我也因為這樣算錯了...

所以我後來就不管秒數

只用" 點和線 的關係來判斷" 就AC了~


 
#7164: Re:問


jimmyee (LEVEL_UP)

學校 : 國立臺灣大學
編號 : 20170
來源 : [140.112.42.92]
最後登入時間 :
2016-03-18 15:33:33
b073. E. 東方幻想鄉 -- 2007 NPSC 高中組初賽 | From: [140.112.241.231] | 發表日期 : 2012-11-08 11:10

這題並不是什麼浮點數誤差喔

 題目本來就有說一定是整數

不過這題按照上面提供的解法會出現錯誤的原因是:

當子彈方向和人與子彈在反方向時就會GG

所以再加個判斷方向的條件即可 

 
ZeroJudge Forum