通常如何定义矢量旋转和反射,函数在 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 维向量的唯一教程超出了我的数学知识。