2

関数がHaskellのn次元で機能する場合、一般的にベクトルの回転と反射を定義するにはどうすればよいですか?

現在、内積、正規化、投影を行っていますが、反射と回転に固執しています。

data Vector s a = Vector {len::s,arr::a}

normalize :: Vector s a → Vector s a
normalize =  toVector . uncurry (zipWith (/))
                      . (id&&&(repeat . sqrt . sum . map (^2)))
                      . fromVector

dot        :: Vector s a → Vector s a → a
dot v = sum ∘ zipWith (*) (fromVector v) ∘ fromVector

project    :: Vector s a → Vector s a → Vector s a
project v = toVector ∘ uncurry (zipWith (*))
                     ∘ (fromVector&&&(repeat ∘ (v`dot`)))

私は何日も検索してきましたが、Haskell を使用して数学を理解すると、明確なコードがなく (またはコードがまったくない)、n 次元ベクトルに関するチュートリアルだけが私の数学の知識を超えている場合に問題が発生することがあるようです。

4

2 に答える 2