Processing with SML
val start = ()
val white = (255, 255, 255)
fun setup p = (background p white;
frameRate p 60)
fun draw p () =
let val (w,h) = (real (width p), real (height p))
val (mx,my) = (real (mouseX p), real (mouseY p))
val _ = line p (0.0,0.0) (mx,my)
in ()
end
val _ = run setup draw start
val start = (100.0, 100.0, 10.0, 13.0)
val red = (255,0,0)
val white = (255, 255, 255)
fun setup p = (background p white;
frameRate p 60)
fun draw p (x,y, xspeed,yspeed) =
let val _ = background p red;
val _ = ellipse p (x, y) (40.0, 40.0)
val (w,h) = (width p, height p)
val newxspeed = if x > real w orelse x < 0.0
then ~ xspeed
else xspeed
val newyspeed = if y > real h orelse y < 0.0
then ~ yspeed
else yspeed
in (x + newxspeed, y + newyspeed,
newxspeed, newyspeed)
end
val _ = run setup draw start
val start = ()
val white = (255, 255, 255)
fun setup p = (background p white;
frameRate p 60)
fun draw p () =
let val (w,h) = (real (width p), real (height p))
val (mx,my) = (real (mouseX p), real (mouseY p))
val _ = line p (0.0,0.0) (mx,my)
val _ = line p (w, 0.0) (mx,my)
val _ = line p (0.0,h) (mx,my)
val _ = line p (w, h) (mx,my)
in ()
end
val _ = run setup draw start
val start = Random.newgen ()
val white = (255, 255, 255)
fun setup p = (background p white;
frameRate p 60)
fun draw p rng =
let fun randomColour rng =
let val (r,g,b) = (255.0*Random.random rng,
255.0*Random.random rng,
255.0*Random.random rng)
in (floor r, floor g, floor b) end
val (w,h) = (width p, height p)
val (x,y) = (real w*Random.random rng, real h*Random.random rng)
val s = 100.0*Random.random rng
val _ = fill p (randomColour rng)
val _ = ellipse p (x, y) (s,s)
in rng
end
val _ = run setup draw start
val start = (0, 0.0,10000.0)
val white = (255, 255, 255)
fun setup p = (background p white;
frameRate p 60)
fun draw p (r,tx,ty) =
let val (w,h) = (real (width p), real (height p))
val (x,y) = (noise1D p tx, noise1D p ty)
val _ = stroke p (r,0,0)
val _ = line p (0.0,0.0) (x*w,y*h)
val _ = line p (w, 0.0) (x*w,y*h)
val _ = line p (0.0,h) (x*w,y*h)
val _ = line p (w, h) (x*w,y*h)
in ((r + 1) mod 255,
tx+0.01, ty+0.01)
end
val _ = run setup draw start
(* Ported from Processing example by Casey Reas and Ben Fry *)
(* Euclidean distance *)
fun distance (x1,y1) (x2,y2) =
Math.sqrt (Math.pow (x2 - x1, 2.0) +
Math.pow (y2 - y1, 2.0))
val nCircles = 10
val stepSize = 400 div (nCircles-1)
val max_dist = distance (0.0, 0.0) (400.0, 400.0)
(* No state *)
val start = ()
fun setup p = noStroke p;
fun drawCircles p =
let val mpos = (real (mouseX p), real (mouseY p))
fun drawCircle (i,j) =
let val size = distance mpos (i, j) / max_dist * 120.0
in
ellipse p (i, j) (size, size)
end
in
List.tabulate (nCircles, fn i =>
List.tabulate (nCircles, fn j =>
drawCircle (real (i*stepSize),
real (j*stepSize))))
end
fun draw p () =
(background p (51,51,51);
drawCircles p;
())
val _ = run setup draw start