Cornell CS 465 Fall 2003
Solutions for Homework 1b (discussion questions)
------------------------------------------------
1. Sketch graphs of the brush's alpha channel along a line through the
brush center for p = 0.5, 1.0, and 2.0. Pay attention to continuity
and zero crossings.
(see sketch)
2. The result of painting on the top layer should be the same as painting in
the bottom layer. What property of Porter and Duff's over operation
ensures this?
Because this question was universally misinterpreted, despite my attempts to
clarify it after the fact, we did not grade it. Here is the intended
solution:
When you paint a stroke onto the top layer, you are doing many compositing
operations. For example, suppose there were three mouse motion events in a
particular stroke; then:
top = br_3 over (br_2 over (br_1 over transparent))
and what you see on the screen is
top over bottom =
(br_3 over (br_2 over (br_1 over transparent))) over bottom
On the other hand, if you paint straight on the bottom layer with the same
stroke you get:
bottom = br_3 over (br_2 over (br_1 over bottom))
and what you see on the screen is
top over bottom =
transparent over (br_3 over (br_2 over (br_1 over bottom)))
Given that a transparent image acts as the identity for the over operation,
the two results are
paint on top:
(br_3 over (br_2 over br_1)) over bottom
paint on bottom:
br_3 over (br_2 over (br_1 over bottom))
The reason these are equivalent is the associative property.
3. Suppose you start with the top layer completely transparent (this is its
initial condition), put down exactly one brush image by clicking without
dragging, then do exactly one erase operation by selecting the erase tool
and clicking without dragging in exactly the same location.
a. Does this erase the paint completely? Explain.
No, it does not. The eraser completely erases only at the very center;
elsewhere it partially erases the partially painted pixels.
b. Ignoring discretization effects due to finite resolution and precision,
sketch a graph of the contents of the top layer's alpha channel after
these operations, along a line through the brush center. Pay attention
to continuity and zero crossings.
I didn't specify what p was for this problem so I'll use p = 1, which is
particularly easy to analyze.
The painting operation on a transparent background just leaves a copy of the
brush:
alpha_bg(x) = 1 - |x|/R
(I left out the max and am assuming we know just to look at -R < x < R.)
The erasing operation scales that value by 1 - alpha_brush:
alpha_bg(x) = (1 - alpha_brush) alpha_bg
= (|x|/R) (1 - |x|/R)
To simplify, looking at just the right side and letting R be 1,
alpha_bg(x) = x (1 - x)
(see sketch for graph)