294 THE HOMOGENEOUS MODEL CHAPTER 11
in this sense), this weight attributes a sign to the meet enabling us to know how
L and M intersect: positive when v points counterclockwise of u (in a plane w ith a
counterclockwise orientation), negative in the other direction. Moreover, the weight
is an intersection st rength that can be interpreted as a numerical stability of the
intersection; when the lines intersect perpendicularly it is strongest, and when they
are almost parallel the weig ht becomes very small (and if the lines would be noisy
data, their intersection would indeed get rather unlocalized).
•
Two Parallel Lines. When the weight (u ∧ v)
夹
equals zero, the lines are parallel.
Now the result of the
meet in (11.8) can be simplified to
L ∩ M = V
夹
u − U
夹
v.
Since V
夹
and U
夹
are scalars, this is a multiple of the common direction u
(or v), so the lines now meet in a weighted improper point, although you
may prefer to say that they have a common direction. It is accompanied by a
weight, obviously proportional to the weight of the lines L and M, but also to
their relative position. If we take the lines to be unit lines (in the sense that u
and v are unit vectors), the dual moments are simply their oriented distances
to the origin, and the result simplifies to (δ
M
−δ
L
) u.Sotwo parallel unit lines
intersect in a p oint at infinit y weighted by their distance. This is an interestingly
compact quantitative combination of both their commonality (their direction)
and their difference (their distance).
•
Two Coincident Lines. When the lines are not only parallel, but have distance zero,
the result of the
meet computation above is zero. As we noted in Chapter 5, this
indicates that we have reached a case in which we have the wrong
join to compute
the actual
meet (which should never be zero). Indeed, when the lines coincide, the
situation is rather trivial: their
join is the line, and so is their meet.
If the
meet computations above intimidated you, please realize that you don’t have to do
such computations by hand; the
meet operation will just give the right answer. It switches
cases automatically depending on the relative geometry of its input arguments.
But it is good to realize that the difference between the first two configurations (general
or par allel) is actually not even a case switch for the
meet, since the join does not change.
The configurations merely appear as different cases if we need to interpret finite points
differently from infinite points (for instance, to draw them using their parameters). That
happens only at the end of a chain of computations; if (11.8) was an intermediate result,
you could just compute on without splitting the data flow of the program.
So in practice, you do not need to do such computations before you can write code. We
have only performed them here in detail to comment on the type of result, which is typi-
cal: coordinate-free, weighted, and merging separate geometrical cases. In your code, use
M
∗
L if you know that M and L are guaranteed not to be degener ate; if they may be, use
an algorithmic implementation of the
meet operation L ∩ M. The latter is much more
expensive, as we will find in Section 21.7, and therefore to be avoided.