There's a simple way to make q quite elegant curve: given two lines that meet in a given point and some length L, associate a point of one line with a point of the other line precisely if the sum of their distances from the meeting point is L; between each pair of associated points, draw a straight line. The resulting lines, though all straight, combine to make a smooth curve.
If we shear the diagram parallel to one of our original two lines to make the other perpendicular to it, then scale parallel to this line to get each point on it the same distance away from the meeting point that it was before, we get the equivalent diagram for a perpendicular pair of lines, as shown here; the shear and scaling map straight lines to straight lines, hence map the envelope that a family of straight lines forms to the envelope of the images of those lines. Conversely, for any pair of lines, we can do the scale and shear in reverse to the perpendicular example to get the curve for the chosen pair of lines; so the shape is essentially the same, give or take a shear and a scaling, no matter what lines we take. So it suffices to analyze the nice simple case of perpendicular lines.
Actually, it doesn't make much difference: in the general case, we can take the origin as the point where the two lines meet and select two vectors of length L, one along each line; let these be u and w. Each pair of associated points is s.u and (1 −s).w for some s between 0 and 1. There's some co-vectors in the dual of our plane's space of displacements, n and m, for which n·u = 1 = m·w and n·w = 0 = m·u; so (1 −s).n +s.m maps every point of our line to s.(1 −s). When we now consider a second such line, from t.u to (1 −t).w for some 0≤t≤1, the point where they meet is h.u +k.w for some h, k satisfying h.(1 −s) +k.s = s.(1 −s) and h.(1 −t) +k.t = t.(1 −t); dividing the first by (1 −s) and the second by (1 −t), we get s −s.k/(1 −s) = h = t −t.k/(1 −t). Ignoring the h in the middle of that for now, we can rearrange this to
whence k = (1 −s).(1 −t) and h = s.t (which looks suspiciously like the kind of result that can probably be derived some more elegant way). Now, our curve is visibly determined by meetings of lines whose end-points are close together, i.e. they have s and t very nearly equal; the meeting point is as close as we like to t.t.u +(1 −t).(1 −t).w. So presumably these points, for various t, make up the curve. (Indeed, in the diagram above, the green region's curved boundary is an SVG quadratic bezier describing exactly this curve; its start and end points are where the curve meets the axes and its other control point is where the axes meet.)
as close as we like are rather fuzzy
intuitive reasons to believe the given points are the ones making up the line.
So let's go back to the fact that every point on the line from s.u to (1
−s).w contracts with (1 −s).n +s.m to give s.(1 −s); points on
one side of it contract with (1 −s).n +s.m to give a higher value, while
those on the other side give a lower value. The high value side is the one that
includes points reached by adding positive amounts of u and v to points on the
line (so this includes the green area in the diagram above). If we instead us
n/s +m/(1 −s), the value on the line is 1. The low-value side of our
curve is the set of points at which n/t +m/(1 −t) is less than 1 for at
least some t between 0 and 1; and the high side is the set of points for which
that form is greater than 1 for all t between 0 and 1. The curve itself is thus
the set of points at which n/t +m/(1 −t) ≥ 1 for all t and there's some
t (the one whose straight line the point is on) at which the form's value is
So now, for any other t between 0 and 1, consider the value of n/t +m/(1 −t) at s.s.u +(1 −s).(1 −s).w:
which, for 0 < t < 1, is necessarily ≥ 1, with equality precisely if t = s. So the point s.s.u +(1 −s).(1 −s).w on the line from s.u to (1 −s).w is on one chord of our envelope, but on the high value side of each of the other chords that make up our envelope. Thus it is on the curve and the curve is, indeed, the set of such points, for s ranging from 0 to 1.Written by Eddy.