2008年2月11日 星期一

Problem 11326 Laser Pointer,雷射光筆

這題用到三角函數,首先雷射光射出的第一個落點,在射出角度大於arctan(W/L)時,會在對面(長L)的鏡子上。雷射行進的距離為 a = W/sin(e),水平平移的距離為 len = W/tan(e),只要累積的水平平移不超過L,表示會有一次反彈。最後落在寬 W 的出口時,可以用lastw = (L-累積平移)*tan(e)算門上的落點,這時要注意反彈次數是奇或偶,這個最後落點 lastw 可以用畢式(高商)定理算 B。重要部份程式顯示如下:
        len = W/tan(e*M_PI/180);
while (len+dist<L)
{
dist += len;
A += W/sin(e*M_PI/180);
len = W/tan(e*M_PI/180);
j++;
}
A += (L-dist)/cos(e*M_PI/180);
lastw = (L-dist)*tan(e*M_PI/180);
if (j%2==1)
B = sqrt((W-lastw)*(W-lastw)+L*L);
else
B = sqrt(lastw*lastw+L*L);

p11326題目連結
回ACM題庫目錄
回首頁

沒有留言: