Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.postscript > #1363
| From | John Deubert <john@acumentraining.com> |
|---|---|
| Organization | Acumen Training |
| Newsgroups | comp.lang.postscript |
| Date | 2013-04-01 07:09 -0700 |
| Message-ID | <2013040107092515878-john@acumentrainingcom> (permalink) |
| References | <c866t.310117$PC7.285767@newsfe03.iad> |
| Subject | Re: merging colors.. |
On 2013-04-01 03:19:10 +0000, Robert Baer said:
> This is my first "fancy" program, three color-shaded circles.
> It would be nice to have the colors appropriately combine/add in the
> overlap regions.
> Is there a nice way to do that?
>
> %! % three.ps
> /inch {72 mul} def % 72 pixels to the inch
> /N 500 def % steps
> /red 1 def
> /green {1 3 div} def
> /blue {2 3 div} def
> /size {dup inch exch inch scale} def
> /circle
> {
> newpath
> exch % order: hue sat on top
> 0 0 moveto % (circlestack) stack pop % ? where does it go?
> 1 sethsbcolor % hue sat 1
> 0 0 1 -270 90 arc % includes a straight line to the initial
> point of the arc
> % x y r ang1 ang2 % from, to angles
> closepath % and a curved section to the end of the arc.
> pop
> } def
>
> gsave
> 267 400 translate % middle, landscape
> 1 1 N % Set up the for operator to iterate
> {
> gsave % Enclose the ‘‘circle’’ operation in a
> gsave - grestore
> % radius must shrink as sat grows for proper shading..
> dup N exch sub N div dup 3 mul size
> 1 exch sub
> red circle
> gsave fill grestore % Save the circle path for use after the fill.
> grestore % Get out of the coordinate system left
> by circle.
> } for % Close the procedure body and execute
> the for operator.
> grestore
>
> gsave
> 400 200 translate % middle, landscape
> 1 1 N % Set up the for operator to iterate
> {
> gsave % Enclose the ‘‘circle’’ operation in a
> gsave - grestore
> % radius must shrink as sat grows for proper shading..
> dup N exch sub N div dup 3 mul size
> 1 exch sub
> green circle
> gsave fill grestore % Save the circle path for use after the fill.
> grestore % Get out of the coordinate system left
> by circle.
> } for % Close the procedure body and execute
> the for operator.
> grestore
>
> gsave
> 533 400 translate % middle, landscape
> 1 1 N % Set up the for operator to iterate
> {
> gsave % Enclose the ‘‘circle’’ operation in a
> gsave - grestore
> % radius must shrink as sat grows for proper shading..
> dup N exch sub N div dup 3 mul size
> 1 exch sub
> blue circle
> gsave fill grestore % Save the circle path for use after the fill.
> grestore % Get out of the coordinate system left
> by circle.
> } for % Close the procedure body and execute
> the for operator.
> grestore
> gsave
> /Helvetica findfont
> 24 scalefont setfont
> 320 580 moveto
> ( Linear gradient) show
> grestore
> showpage
The simplest algorithm for the "three-circle-overlap" I know goes
something like this:
Given three overlapping circles A, B, and C:
Do A; fill red
Do B; gsave; clip; fill green
Do A; Fill yellow
grestore
Do C; clip; Fill blue
Do A; fill magenta
Do B; clip; fill cyan
Do A; fill white
This is for the classic red-green-blue circles (yielding overlaps of c,
m, y, and white); I sometimes present this as an extra-credit problem
in the PostScript Foundations class.
Here's a PostScript implementation:
% ========= cut here ========
/CircleA
{ 300 500 100 0 360 arc } bind def
/CircleB
{ 375 425 100 0 360 arc } bind def
/CircleC
{ 225 425 100 0 360 arc } bind def
CircleA
1 0 0 setrgbcolor fill
gsave
CircleB
clip
0 1 0 setrgbcolor
fill
CircleA
1 1 0 setrgbcolor
fill
grestore
CircleC
clip
0 0 1 setrgbcolor
fill
CircleA
1 0 1 setrgbcolor
fill
CircleB
clip
0 1 1 setrgbcolor
fill
CircleA
1 setgray
fill
showpage
% ============ cut here ============
You can pretty easily adapt this for your quite nice-looking radial gradients.
- John
P.S. If you like gradients, you might want to look into PostScript's
smooth shading. The Acumen Journal has a brief introduction to the
topic way back in issue #1, November 2000. The Journal is free for the
downloading at www.acumentraining.com/acumenjournal.html.
- John
--
========
John Deubert
Acumen Training
PostScript & PDF Engineering Classes & Consulting
www.acumentraining.com
Learn PostScript programming techniques
Read the free Acumen Journal
acumentraining.com/acumenjournal.html
Back to comp.lang.postscript | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
merging colors.. Robert Baer <robertbaer@localnet.com> - 2013-03-31 19:19 -0800
Re: merging colors.. luser- -droog <mijoryx@yahoo.com> - 2013-03-31 23:18 -0700
Re: merging colors.. luser- -droog <mijoryx@yahoo.com> - 2013-03-31 23:24 -0700
Re: merging colors.. Robert Baer <robertbaer@localnet.com> - 2013-04-01 20:48 -0800
Re: merging colors.. luser- -droog <mijoryx@yahoo.com> - 2013-04-02 21:06 -0700
Re: merging colors.. gernot.hoffmann@hs-emden-leer.de - 2013-04-01 02:04 -0700
Re: merging colors.. Don Lancaster <don@tinaja.com> - 2013-04-02 17:03 -0700
Re: merging colors.. John Deubert <john@acumentraining.com> - 2013-04-01 07:09 -0700
Re: merging colors.. John Deubert <john@acumentraining.com> - 2013-04-01 09:27 -0700
csiph-web