如何在一般情况下定义向量旋转和反射,其中函数将在Haskell中的n维中工作?如何在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`)))
我一直在searhing好几天,但似乎使用哈斯克尔理解数学有时会引起问题时,没有明确的代码(或根本不会产生代码)和n维向量的唯一教程过去我的数学知识。
做这些甚至编译?现在,如果您查看'dot'的定义,我不会在范围内看到* sum-symbol *和'x' - 还有:仅仅是关于实现还是难以找到所述操作的数学计算?如果是的话,你可以添加预期的签名? – Carsten
应该是: 总和。 zipWith(*)(fromVector v).∘fromVector 我的编辑器默认它为unicode对不起 – SANK
好吧,你应该说服你的编辑有一个更好的复制和粘贴行为 - 仍然:你是否正在寻找数学或翻译有困难? – Carsten