On 03/02/2010 8:50 AM, Ken Knoblauch wrote:
baptiste auguie <baptiste.auguie <at> googlemail.com> writes:
Adding two semi-transparent colours results in non-intuitive colour
mixing (a mystery for me anyway). Is it additive (light), substractive
(paint), or something else? Consider the following example, depending
on the order of the two "layers" the overlap region is either purple
or dark red. I have no idea why.

png("testingOrder.png")
plot.new()

# Red below
rect(0.3, 0.5, 1, 1, col=rgb(1, 0, 0, alpha=0.5))
rect(0, 0.5, 0.7, 1, col=rgb(0, 0, 1, alpha=0.5))

# Blue below
rect(0, 0, 0.7, 0.5, col=rgb(0, 0, 1, alpha=0.5))
rect(0.3, 0, 1, 0.5, col=rgb(1, 0, 0, alpha=0.5))

I think it's a fairly simple calculation. In the first example: We are writing red (1,0,0) at alpha=0.5 onto white (1,1,1), so we get a mixture of half existing and half new, i.e. (1,0.5,0.5). Then we write blue (0,0,1) at alpha 0.5 onto that, giving (0.5, 0.25, 0.75).

In the second pair, the first write yields (0.5,0.5,1), and the second yields (0.75, 0.25, 0.5).

So this is like mixing paints: you don't get the same colour if you mix equal parts red and white, then take equal parts of that mixture with blue, as you get if you put the blue in first. You've got less red in the first mixture than in the second.

You would get the same color in both mixtures if you didn't mix the white in:

# Red below
rect(0.3, 0.5, 1, 1, col=rgb(1, 0, 0, alpha=1))
rect(0, 0.5, 0.7, 1, col=rgb(0, 0, 1, alpha=0.5))

# Blue below
rect(0, 0, 0.7, 0.5, col=rgb(0, 0, 1, alpha=1))
rect(0.3, 0, 1, 0.5, col=rgb(1, 0, 0, alpha=0.5))


Duncan Murdoch


dev.off()
I would expect overlaid transparencies to act like filters and
multiply, producing so-called subtractive color mixing,
so blue and yellow gives green.  Interestingly, however,
overlaying filters is not necessarily a commutative operation, since a transparent filter can yield an
additive component (through scatter, for example)
though I suspect that the non-commutativity comes
about in R because these rules apply to physical lights,
filters and surfaces and in R, it is some uncalibrated combination
of frame buffer values that is being used.
Best,

baptiste


Ken


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to