POJ 2991: Crane

何を血迷ったのか,くっそ忙しいときに取り組んだ.そのうえ,勘違いをただすためにかなり時間を食った.今は反省している

問題文・解法は蟻本まんまのため省略.
多分同じ間違いをする人はいないと思うが,もしも同じ勘違いで頭を悩ませる人が出てきたときのために勘違いしてたことを書く.

疑問:「回転する角度って,累積していっていいの?」

問題ない.というか,普通の人にはこれを勘違いする理由が見当たらないかもしれない.
クレーンの座標の導出式は,
 \displaystyle{\vec{v_0} + \sum_{i=1}^{n-1} R(\theta_i)\vec{v_i}}
だと思っていた.ただし,i番目のクレーンの回転角度を \theta_i R(\theta) \thetaだけ回転させる行列, \vec{v_i} = (0,L_i)とする.

この式はまちがっていて,正しくは
 \displaystyle{\vec{v_0} + R(\theta_1)(\vec{v_1} + R(\theta_2)(\vec{v_2} + \dots)).}
もうちょっとかっこよくすると,
 \displaystyle{\vec{v_0} + \sum_{i=1}^{n-1} (\prod_{j=1}^i R(\theta_j))\vec{v_i}}.

なぜならば,i番目のクレーンを回転させると,それ以外のクレーンも(原点は違うが)同じ角度の分だけ回転されるから.
i番目のクレーンから見た座標系は,i-1番目のクレーンの座標系に乗っていると考えたらすっきり納得できた.
今では,なぜ勘違いをしていたのかわからない...