nano_exit

基礎的なことこそ、簡単な例が必要だと思うのです。

「式の形」と「リーダブルコード」について

正射影ベクトルの公式というものがあるらしい。
正射影ベクトルの公式の証明と使い方 | 高校数学の美しい物語

\displaystyle
\vec p = \frac{ \vec a \cdot \vec b }{ | \vec a |^2  } \vec a
これは、「ベクトル \vec bをベクトル \vec a方向に射影したベクトル \vec pを求める」というものである。

この公式を見て思ったのは、「計算出来るけど『意味が』分かり易い形ではない」ということである。
プログラムのソースコードを書いているとだんだんわかってくるが、1週間単位で見ても、「とりあえずグチャグチャでも良いから動けば良い」というものを書くより、「後で見返したときに『意味が』分かり易いように書く」方が重要であることが多い。

そもそも、ベクトルとは何か?
結局は、「その人がどう思っているか?」が全てであり、その思考が反映された展開が成されていれば、細部はともかく「気持ち」はわかるものになるはずである。
ベクトルを幾何的に思っていれば、「ベクトル=大きさ×向き」という風に捉えて話が進むし、一次元配列だと思えばプログラム的な見方になるわけで、「こう考えなければならない」というものはない。
重要なのは「こう考えていますよ~」という意思が分かるように記述することである。

今、ベクトルを幾何的に捉えるとする。
すると、「ベクトル=大きさ×向き」であるため、「大きさ」と「向き」がわかればベクトルが求まると素直に考えるであろう。
もしくは、ベクトルが与えられたときに、どれが大きさでどれが向きが分かるように書くのが自然である。
これに則ると、まず向きは、 \vec aの方向だから、 \vec aを自身の大きさ |a|で割った向き \hat aが欲しい。

\displaystyle
\hat p = \hat a = \frac{ \vec a }{ | \vec a |}

次に、「方向 \hat aに射影した \vec bの大きさ」が知りたい。この「射影」は方向ベクトルとの内積を取ることで達成される。
したがって、

\displaystyle
  |\vec p| = \vec b \cdot \hat a

よって、射影したベクトル \vec pは、「大きさ \times向き」に則った形で表せる。

\displaystyle
\vec p = |\vec p| \hat p =  ( \vec b \cdot \hat a ) \, \hat a

この形の方が、明らかに直感的で、もし万が一書き間違えてもミスに気付き易いであろう。
「失敗しないようにする」のではなく、「失敗してもそれに簡単に気付けて修正出来る」方がよっぽど重要である。