Intersection points for lines or polygon edges

`[`

returns the intersection points of two polylines in a planar, Cartesian system, with
vertices defined by `xi`

,`yi`

] = polyxpoly(`x1`

,`y1`

,`x2`

,`y2`

)`x1`

, `y1`

,
`x2`

and `y2`

. The output arguments,
`xi`

and `yi`

, contain the
*x*- and *y*-coordinates of each point at
which a segment of the first polyline intersects a segment of the second. In the
case of overlapping, collinear segments, the intersection is actually a line segment
rather than a point, and both endpoints are included in `xi`

,
`yi`

.

`[`

returns a two-column array of line segment indices corresponding to the intersection
points. The `xi`

,`yi`

,`ii`

] = polyxpoly(___)*k*-th row of `ii`

indicates which
polyline segments give rise to the intersection point `xi(k)`

,
`yi(k)`

.

To remember how these indices work, just think of segments and vertices as fence
sections and posts. The *i*-th fence section connects the
*i*-th post to the (*i*+1)-th post. In
general, letting *i* and *j* denote the scalar
values comprised by the *k*-th row of `ii`

, the
intersection indicated by that row occurs where the *i*-th segment
of the first polyline intersects the *j*-th segment of the second
polyline. But when an intersection falls precisely on a vertex of the first
polyline, then *i* is the index of that vertex. Likewise with the
second polyline and the index *j*. In the case of an intersection
at the *i*-th vertex of the first line, for example,
`xi(k)`

equals `x1(i)`

and
`yi(k)`

equals `y1(i)`

. In the case of
intersections between vertices, *i* and *j* can be
interpreted as follows: the segment connecting `x1(i)`

,
`y1(i)`

to `x1(i+1)`

,
`y1(i+1)`

intersects the segment connecting
`x2(j)`

, `y2(j)`

to
`x2(j+1)`

, `y2(j+1)`

at the point
`xi(k)`

, `yi(k)`

.