{-
(c) 2013 Trevor Rae, Paul Warnick, James Zhu, Katrine Rachitsky
Permission granted to distributed and modify, as long as this notice is preserved. Distributed without warranty.
-}
module Main where
import Graphics.Gloss
----------------------------------------------------------------------------------------------------
sun :: Color -- Colours the Sun
sun = makeColor 1.0 0.7 0.0 0.7
mercury :: Color -- Colours each planet properly
mercury = makeColor 1.0 1.0 1.0 0.7
venus :: Color
venus = makeColor 1.0 0.5 0.2 0.7
earth :: Color
earth = makeColor 0.1 0.9 0.4 0.7
mars :: Color
mars = makeColor 1.0 0.1 0.1 0.7
jupiter :: Color
jupiter = makeColor 0.7 0.5 0.2 0.7
saturn :: Color
saturn = makeColor 0.7 0.4 0.1 0.7
uranus :: Color
uranus = makeColor 0.0 0.9 0.8 0.7
neptune :: Color
neptune = makeColor 0.1 0.1 0.9 0.7
pluto :: Color
pluto = makeColor 1.0 1.0 1.0 0.7
----------------------------------------------------------------------------------------------------
main = solar
solar = draw $ \t -> Pictures $ -- when "solar" is typed into ghci the picture is drawn using the "animate" function
[
Translate (-423) 373 $ Color white $ ThickCircle 0 2, -- all of this is just the stars for effect
Translate (-245) 456 $ Color white $ ThickCircle 0 2,
Translate (-503) 283 $ Color white $ ThickCircle 0 2,
Translate (-234) 443 $ Color white $ ThickCircle 0 2,
Translate (-150) 253 $ Color white $ ThickCircle 0 2,
Translate (-320) 412 $ Color white $ ThickCircle 0 2,
Translate (-650) 125 $ Color white $ ThickCircle 0 2,
Translate (-450) 342 $ Color white $ ThickCircle 0 2,
Translate (-350) 212 $ Color white $ ThickCircle 0 2,
Translate 220 (-342) $ Color white $ ThickCircle 0 2,
Translate 284 (-423) $ Color white $ ThickCircle 0 2,
Translate 385 (-231) $ Color white $ ThickCircle 0 2,
Translate 544 (-230) $ Color white $ ThickCircle 0 2,
Translate 364 (-420) $ Color white $ ThickCircle 0 2,
Translate 634 (-234) $ Color white $ ThickCircle 0 2,
Translate 273 (-435) $ Color white $ ThickCircle 0 2,
Translate 253 (-342) $ Color white $ ThickCircle 0 2,
Translate 345 (-213) $ Color white $ ThickCircle 0 2,
Translate 745 (-123) $ Color white $ ThickCircle 0 2,
Translate (-823) (-423) $ Color white $ ThickCircle 0 2,
Translate (-820) (-232) $ Color white $ ThickCircle 0 2,
Translate (-923) (-343) $ Color white $ ThickCircle 0 2,
Translate (-723) (-234) $ Color white $ ThickCircle 0 2,
Translate (-753) (-123) $ Color white $ ThickCircle 0 2,
Translate (-173) (-123) $ Color white $ ThickCircle 0 2,
Translate (-586) (-432) $ Color white $ ThickCircle 0 2,
Translate (-834) (-321) $ Color white $ ThickCircle 0 2,
Translate (-283) (-234) $ Color white $ ThickCircle 0 2,
Translate (-345) (-234) $ Color white $ ThickCircle 0 2,
Translate (-384) (-434) $ Color white $ ThickCircle 0 2,
Translate (-856) (-321) $ Color white $ ThickCircle 0 2,
Translate (-384) (-423) $ Color white $ ThickCircle 0 2,
Translate 856 232 $ Color white $ ThickCircle 0 2,
Translate 834 324 $ Color white $ ThickCircle 0 2,
Translate 934 342 $ Color white $ ThickCircle 0 2,
Translate 263 432 $ Color white $ ThickCircle 0 2,
Translate 342 324 $ Color white $ ThickCircle 0 2,
Translate 564 234 $ Color white $ ThickCircle 0 2,
Translate 435 231 $ Color white $ ThickCircle 0 2,
Translate 765 234 $ Color white $ ThickCircle 0 2,
Translate 123 234 $ Color white $ ThickCircle 0 2,
----------------------------------------------------------------------------------------------------
planet 100 5 (t) sun, -- here each planet is put in the picture with the names, it uses the planet radius, orbit from the centre, t measures the speed of orbit and the last part is the colour
names 5 (t) white "Sun", -- this does the same as above but with the name
planet 10 75 (t*1.6) mercury ,
names 75 (t*1.6) white "Mercury",
planet 25 100 (-t*1.18) venus,
names 100 (-t*1.18) white "Venus",
planet 17 115 (t) earth,
names 115 (t) white "Earth",
planet 13 130 (t*0.8) mars,
names 130 (t*0.8) white "Mars",
planet 100 250(t*0.4) jupiter,
names 250 (t*0.4) white "Jupiter",
planet 80 350 (t*0.3) saturn,
names 350 (t*0.3) white "Saturn",
planet 65 450 (-t*0.2) uranus,
names 450 (-t*0.2) white "Uranus",
planet 70 520 (t*0.18) neptune,
names 520 (t*0.18) white "Neptune",
planet 10 600 (t*0.15) pluto,
names 600 (t*0.15) white "Pluto"
]
----------------------------------------------------------------------------------------------------
planet planetRadius orbitalRadius theta col = -- determines what happens when "planet" is used
Pictures
[
Color white $ Circle orbitalRadius, Translate (orbitalRadius * sin theta) (orbitalRadius * cos theta) $ Color col $ ThickCircle 0 planetRadius -- colours a circle white, and translates a thick circle around it
]
----------------------------------------------------------------------------------------------------
names orbitalRadius theta col name = -- same as above but with the names, also rotates the names around the planets
Pictures
[
Translate (orbitalRadius * sin theta) (orbitalRadius * cos theta) $ Scale 0.1 0.1 $ Rotate (orbitalRadius * sin theta) $ Color white $ Text (show name)
]
----------------------------------------------------------------------------------------------------
draw = animate -- opens the program in a seperate window named "Solar System"
(InWindow
"Solar System" (1900, 1000) (0,0))
black