#!/usr/bin/newlisp
; gradient.lsp - L.M. July 2006
(load "postscript.lsp")
; show color gradients using the YUV color model
;
; 0 <= Y <= 1
; -0.436 <= U <= 0.436 range 0.872
; -0.615 <= V <= 0.615 range 1.230
(define (rgb-yuv r g b)
((transpose (multiply
'((0.299 0.587 0.114)
(-0.147 -0.289 0.436)
(0.615 -0.515 -0.100))
(list (list r) (list g) (list b)))) 0))
(define (yuv-rgb y u v)
((transpose (multiply
'((1 -0.000039457070707 1.139827967171717)
(1 -0.394610164141414 -0.580500315656566)
(1 2.031999684343434 0.000481376262626))
(list (list y) (list u) (list v)))) 0))
; Background
(ps:goto 0 0)
(ps:fill-color 0.0 0.0 0.2)
(ps:shape '((0 792) (90 612) (90 792) (90 612)) true)
; simple grey gradient
;----------------
(ps:line-width 2)
(dotimes (i 100)
(set 'col (mul i 0.01))
(ps:line-color col col col)
(ps:goto 100 (+ i 50))
(ps:drawto 200 (+ i 50)))
(ps:goto 300 100)
(dotimes (i 50)
(set 'col (mul i 0.01))
(ps:line-color col col col)
(ps:circle (- 50 i)))
; YUV colormodel
;----------------
(dotimes (i 100)
(apply ps:line-color (yuv-rgb (mul i 0.01) (mul i 0.00436) (mul i 0.00615)))
(ps:goto 100 (+ i 200))
(ps:drawto 200 (+ i 200)))
(ps:goto 300 250)
(dotimes (i 50)
(apply ps:line-color (yuv-rgb (mul i 0.02) (mul i 0.00872) (mul i 0.0123)))
(ps:circle (- 50 i)))
;----------------
(dotimes (i 100)
(apply ps:line-color (yuv-rgb (mul i 0.01) (mul i 0.00436) (mul i -0.00615)))
(ps:goto 100 (+ i 350))
(ps:drawto 200 (+ i 350)))
(ps:goto 300 400)
(dotimes (i 50)
(apply ps:line-color (yuv-rgb (mul i 0.02) (mul i 0.00872) (mul i -0.0123)))
(ps:circle (- 50 i)))
;----------------
(dotimes (i 100)
(apply ps:line-color (yuv-rgb (mul i 0.01) (mul i -0.00436) (mul i -0.00615)))
(ps:goto 100 (+ i 500))
(ps:drawto 200 (+ i 500)))
(ps:goto 300 550)
(dotimes (i 50)
(apply ps:line-color (yuv-rgb (mul i 0.02) (mul i -0.00872) (mul i -0.0123)))
(ps:circle (- 50 i)))
;----------------
(dotimes (i 100)
(apply ps:line-color (yuv-rgb (mul i 0.01) (mul i -0.00436) (mul i 0.00615)))
(ps:goto 100 (+ i 650))
(ps:drawto 200 (+ i 650)))
(ps:goto 300 700)
(dotimes (i 50)
(apply ps:line-color (yuv-rgb (mul i 0.02) (mul i -0.00872) (mul i 0.0123)))
(ps:circle (- 50 i)))
; RGB
(ps:line-width 4)
(for (y 50 750 4)
(ps:line-color (random) (random) (random))
(ps:goto 400 y)
(ps:drawto 500 y)
)
; Signature
(ps:line-color 0.5 0.5 0.5)
(ps:goto 425 10)
(ps:angle 90)
(ps:font "Helvetica" 10)
(ps:text "made with newLISP and postscript.lsp")
(ps:render)
(exit)
syntax highlighting with newLISP and syntax.cgi