diff options
author | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
---|---|---|
committer | dos-reis <gdr@axiomatics.org> | 2007-08-14 05:14:52 +0000 |
commit | ab8cc85adde879fb963c94d15675783f2cf4b183 (patch) | |
tree | c202482327f474583b750b2c45dedfc4e4312b1d /src/algebra/color.spad.pamphlet | |
download | open-axiom-ab8cc85adde879fb963c94d15675783f2cf4b183.tar.gz |
Initial population.
Diffstat (limited to 'src/algebra/color.spad.pamphlet')
-rw-r--r-- | src/algebra/color.spad.pamphlet | 202 |
1 files changed, 202 insertions, 0 deletions
diff --git a/src/algebra/color.spad.pamphlet b/src/algebra/color.spad.pamphlet new file mode 100644 index 00000000..56801bff --- /dev/null +++ b/src/algebra/color.spad.pamphlet @@ -0,0 +1,202 @@ +\documentclass{article} +\usepackage{axiom} +\begin{document} +\title{\$SPAD/src/algebra color.spad} +\author{Jim Wen} +\maketitle +\begin{abstract} +\end{abstract} +\eject +\tableofcontents +\eject +\section{domain COLOR Color} +<<domain COLOR Color>>= +)abbrev domain COLOR Color +++ Author: Jim Wen +++ Date Created: 10 May 1989 +++ Date Last Updated: 19 Mar 1991 by Jon Steinbach +++ Basic Operations: red, yellow, green, blue, hue, numberOfHues, color, +, *, = +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: +++ References: +++ Description: Color() specifies a domain of 27 colors provided in the +++ \Language{} system (the colors mix additively). + + +Color(): Exports == Implementation where + I ==> Integer + PI ==> PositiveInteger + SF ==> DoubleFloat + + Exports ==> AbelianSemiGroup with + "*" : (PI, %) -> % + ++ s * c, returns the color c, whose weighted shade has been scaled by s. + "*" : (SF, %) -> % + ++ s * c, returns the color c, whose weighted shade has been scaled by s. + "+" : (%, %) -> % + ++ c1 + c2 additively mixes the two colors c1 and c2. + red : () -> % + ++ red() returns the position of the red hue from total hues. + yellow : () -> % + ++ yellow() returns the position of the yellow hue from total hues. + green : () -> % + ++ green() returns the position of the green hue from total hues. + blue : () -> % + ++ blue() returns the position of the blue hue from total hues. + hue : % -> I + ++ hue(c) returns the hue index of the indicated color c. + numberOfHues : () -> PI + ++ numberOfHues() returns the number of total hues, set in totalHues. + color : Integer -> % + ++ color(i) returns a color of the indicated hue i. + + Implementation ==> add + totalHues ==> 27 --see (header.h file) for the current number + + Rep := Record(hue:I, weight:SF) + + + f:SF * c:% == + -- s * c returns the color c, whose weighted shade has been scaled by s + zero? f => c + -- 0 is the identitly function...or maybe an error is better? + [c.hue, f * c.weight] + + x + y == + x.hue = y.hue => [x.hue, x.weight + y.weight] + if y.weight > x.weight then -- let x be color with bigger weight + c := x + x := y + y := c + diff := x.hue - y.hue + if (xHueSmaller:= (diff < 0)) then diff := -diff + if (moreThanHalf:=(diff > totalHues quo 2)) then diff := totalHues-diff + offset : I := wholePart(round (diff::SF/(2::SF)**(x.weight/y.weight)) ) + if (xHueSmaller and ^moreThanHalf) or (^xHueSmaller and moreThanHalf) then + ans := x.hue + offset + else + ans := x.hue - offset + if (ans < 0) then ans := totalHues + ans + else if (ans > totalHues) then ans := ans - totalHues + [ans,1] + + x = y == (x.hue = y.hue) and (x.weight = y.weight) + red() == [1,1] + yellow() == [11::I,1] + green() == [14::I,1] + blue() == [22::I,1] + sample() == red() + hue c == c.hue + i:PositiveInteger * c:% == i::SF * c + numberOfHues() == totalHues + + color i == + if (i<0) or (i>totalHues) then + error concat("Color should be in the range 1..",totalHues::String) + [i::I, 1] + + coerce(c:%):OutputForm == + hconcat ["Hue: "::OutputForm, (c.hue)::OutputForm, + " Weight: "::OutputForm, (c.weight)::OutputForm] + +@ +\section{domain PALETTE Palette} +<<domain PALETTE Palette>>= +)abbrev domain PALETTE Palette +++ Author: Jim Wen +++ Date Created: May 10th 1989 +++ Date Last Updated: Jan 19th 1990 +++ Basic Operations: dark, dim, bright, pastel, light, hue, shade, coerce +++ Related Constructors: +++ Also See: +++ AMS Classifications: +++ Keywords: dim,bright,pastel,coerce +++ References: +++ Description: This domain describes four groups of color shades (palettes). + +Palette(): Exports == Implementation where + I ==> Integer + C ==> Color + SHADE ==> ["Dark","Dim","Bright","Pastel","Light"] + + Exports ==> SetCategory with + dark : C -> % + ++ dark(c) sets the shade of the indicated hue of c to it's lowest value. + dim : C -> % + ++ dim(c) sets the shade of a hue, c, above dark, but below bright. + bright : C -> % + ++ bright(c) sets the shade of a hue, c, above dim, but below pastel. + pastel : C -> % + ++ pastel(c) sets the shade of a hue, c, above bright, but below light. + light : C -> % + ++ light(c) sets the shade of a hue, c, to it's highest value. + hue : % -> C + ++ hue(p) returns the hue field of the indicated palette p. + shade : % -> I + ++ shade(p) returns the shade index of the indicated palette p. + coerce : C -> % + ++ coerce(c) sets the average shade for the palette to that of the + ++ indicated color c. + + Implementation ==> add + Rep := Record(shadeField:I, hueField:C) + + dark c == [1,c] + dim c == [2,c] + bright c == [3,c] + pastel c == [4,c] + light c == [5,c] + hue p == p.hueField + shade p == p.shadeField + sample() == bright(sample()) + coerce(c:Color):% == bright c + coerce(p:%):OutputForm == + hconcat ["[",coerce(p.hueField),"] from the ",SHADE.(p.shadeField)," palette"] + +@ +\section{License} +<<license>>= +--Copyright (c) 1991-2002, The Numerical ALgorithms Group Ltd. +--All rights reserved. +-- +--Redistribution and use in source and binary forms, with or without +--modification, are permitted provided that the following conditions are +--met: +-- +-- - Redistributions of source code must retain the above copyright +-- notice, this list of conditions and the following disclaimer. +-- +-- - Redistributions in binary form must reproduce the above copyright +-- notice, this list of conditions and the following disclaimer in +-- the documentation and/or other materials provided with the +-- distribution. +-- +-- - Neither the name of The Numerical ALgorithms Group Ltd. nor the +-- names of its contributors may be used to endorse or promote products +-- derived from this software without specific prior written permission. +-- +--THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS +--IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +--TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +--PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER +--OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +--EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +--PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +--PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +--LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +--NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +--SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +@ +<<*>>= +<<license>> + +<<domain COLOR Color>> +<<domain PALETTE Palette>> +@ +\eject +\begin{thebibliography}{99} +\bibitem{1} nothing +\end{thebibliography} +\end{document} |