module VectorMaps ( vectorElementY ,vectorAdd ,vectorSubtract ,vectorScalar ,vectorNorm ,vectorNomalize ,vectorInnerProduct ) where import Graphics.Rendering.OpenGL import Control.Applicative import States ------ベクトル成分を抜き取り vectorElementY :: (Vector3 a) -> a vectorElementY (Vector3 x y z) = y -----ベクトルの加法 vectorAdd :: (Vector3 GLfloat) -> (Vector3 GLfloat) -> (Vector3 GLfloat) vectorAdd u v = (+) <$> u <*> v -----ベクトルの減算 vectorSubtract :: (Vector3 GLfloat) -> (Vector3 GLfloat) -> (Vector3 GLfloat) vectorSubtract u v = (-) <$> u <*> v -----スカラー倍 vectorScalar :: GLfloat -> (Vector3 GLfloat) -> (Vector3 GLfloat) vectorScalar a (Vector3 x y z) = (Vector3 (a * x) (a * y) (a * z)) -----ベクトルのノルム vectorNorm :: (Vector3 GLfloat) -> GLfloat vectorNorm (Vector3 x y z) = sqrt (x^2 + y^2 + z^2) -----ベクトルの正規化 vectorNomalize :: (Vector3 Float) -> (Vector3 Float) vectorNomalize v = vectorScalar (1 / vectorNorm v) v -----ベクトルの内積 vectorInnerProduct :: Num a => (Vector3 a) -> (Vector3 a) -> a vectorInnerProduct (Vector3 a b c) (Vector3 x y z) = a * x + b * y + c * z