Skip to content

Instantly share code, notes, and snippets.

@haiiro-shimeji
Last active December 10, 2015 18:18
Show Gist options
  • Save haiiro-shimeji/4473110 to your computer and use it in GitHub Desktop.
Save haiiro-shimeji/4473110 to your computer and use it in GitHub Desktop.
Mathematics
data Vector3 a = Vector3
(
a,
a,
a
) deriving (Show, Eq)
data Matrix3 a = Matrix3
(
(a, a, a),
(a, a, a),
(a, a, a)
) deriving (Show, Eq)
vplus :: (Num a) => Vector3 a -> Vector3 a -> Vector3 a
vplus (Vector3 (i, j, k)) (Vector3 (l, m, n)) =
Vector3 (
(i+l),
(j+m),
(k+n)
)
vdotProd :: (Num a) => Vector3 a -> Vector3 a -> a
vdotProd (Vector3 (i, j, k)) (Vector3 (l, m, n)) = i*l + j*m + k*n
vsmult :: (Num a) => a -> Vector3 a -> Vector3 a
vsmult m (Vector3 (i, j, k)) =
Vector3 (
(m*i),
(m*j),
(m*k)
)
vmmult :: (Num a) => Matrix3 a -> Vector3 a -> Vector3 a
vmmult
(Matrix3 (
(a00, a01, a02),
(a10, a11, a12),
(a20, a21, a22)
))
(Vector3 (
b0,
b1,
b2
))
=
Vector3(
a00*b0+a01*b1+a02*b2,
a10*b0+a11*b1+a12*b2,
a20*b0+a21*b1+a22*b2
)
vcrsProd :: (Num a) => Vector3 a -> Vector3 a -> Vector3 a
vcrsProd (Vector3 (i, j, k)) (Vector3 (l, m, n)) =
Vector3 (
(j*n - k*m),
(i*n - k*l),
(i*m - j*l)
)
mplus :: (Num a) => Matrix3 a -> Matrix3 a -> Matrix3 a
mplus
(Matrix3 (
(a00, a01, a02),
(a10, a11, a12),
(a20, a21, a22)
))
(Matrix3 (
(b00, b01, b02),
(b10, b11, b12),
(b20, b21, b22)
))
=
(Matrix3 (
(a00+b00, a01+b01, a02+b02),
(a10+b10, a11+b11, a12+b12),
(a20+b20, a21+b21, a22+b22)
))
msmult :: (Num a) => a -> Matrix3 a -> Matrix3 a
msmult
m
(Matrix3 (
(a00, a01, a02),
(a10, a11, a12),
(a20, a21, a22)
))
=
(Matrix3 (
(m*a00, m*a01, m*a02),
(m*a10, m*a11, m*a12),
(m*a20, m*a21, m*a22)
))
mmult :: (Num a) => Matrix3 a -> Matrix3 a -> Matrix3 a
mmult
(Matrix3 (
(a00, a01, a02),
(a10, a11, a12),
(a20, a21, a22)
))
(Matrix3 (
(b00, b01, b02),
(b10, b11, b12),
(b20, b21, b22)
))
=
(Matrix3 (
(a00*b00+a01*b10+a02*b20, a00*b01+a01*b11+a02*b21, a00*b02+a01*b12+a02*b22),
(a10*b00+a11*b10+a12*b20, a10*b01+a11*b11+a12*b21, a10*b02+a11*b12+a12*b22),
(a20*b00+a21*b10+a22*b20, a20*b01+a21*b11+a22*b21, a20*b02+a21*b12+a22*b22)
))
mtrans :: (Num a) => Matrix3 a -> Matrix3 a
mtrans
(Matrix3 (
(a00, a01, a02),
(a10, a11, a12),
(a20, a21, a22)
))
=
(Matrix3 (
(a00, a10, a20),
(a01, a11, a21),
(a02, a12, a22)
))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment