module Graphics.Image.ColorSpace.Complex (
Complex(..), (+:), realPart, imagPart,
mkPolar, cis, polar, magnitude, phase,
conjugate
) where
import Graphics.Image.Interface (ColorSpace(..))
import Control.Applicative
import Data.Complex (Complex(..))
import qualified Data.Complex as C hiding (Complex(..))
infix 6 +:
(+:) :: ColorSpace cs => Pixel cs e -> Pixel cs e -> Pixel cs (Complex e)
(+:) = liftA2 (:+)
realPart :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
realPart = liftA C.realPart
imagPart :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
imagPart = liftA C.imagPart
mkPolar :: (ColorSpace cs, RealFloat e) => Pixel cs e -> Pixel cs e -> Pixel cs (Complex e)
mkPolar = liftA2 C.mkPolar
cis :: (ColorSpace cs, RealFloat e) => Pixel cs e -> Pixel cs (Complex e)
cis = liftA C.cis
polar :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> (Pixel cs e, Pixel cs e)
polar !zPx = (magnitude zPx, phase zPx)
magnitude :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
magnitude = liftA C.magnitude
phase :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs e
phase = liftA C.phase
conjugate :: (ColorSpace cs, RealFloat e) => Pixel cs (Complex e) -> Pixel cs (Complex e)
conjugate = liftA C.conjugate