Documentation

This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English version of the page.

polyxpoly

Intersection points for lines or polygon edges

Syntax

```[xi,yi] = polyxpoly(x1,y1,x2,y2) [xi,yi,ii] = polyxpoly(...) [xi,yi] = polyxpoly(...,'unique') ```

Description

`[xi,yi] = polyxpoly(x1,y1,x2,y2)` returns the intersection points of two polylines in a planar, Cartesian system. `x1` and `y1` are vectors containing the x- and y-coordinates of the vertices in the first polyline, and `x2` and `y2` contain the vertices in the second polyline. The output variables, `xi` and `yi`, are column vectors containing 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`.

`[xi,yi,ii] = polyxpoly(...)` returns a two-column array of line segment indices corresponding to the intersection points. The 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)`.

`[xi,yi] = polyxpoly(...,'unique')` filters out duplicate intersections, which may result if the input polylines are self-intersecting.

Examples

Use the `polyxpoly` function to find the intersection points between a rectangle and a two-part polyline.

```% Define and fill a rectangular area in the plane xlimit = [3 13]; ylimit = [2 8]; xbox = xlimit([1 1 2 2 1]); ybox = ylimit([1 2 2 1 1]); mapshow(xbox,ybox,'DisplayType','polygon','LineStyle','none') % Define and display a two-part polyline x = [0 6 4 8 8 10 14 10 14 NaN 4 4 6 9 15]; y = [4 6 10 11 7 6 10 10 6 NaN 0 3 4 3 6]; mapshow(x,y,'Marker','+') % Intersect the polyline with the rectangle [xi, yi] = polyxpoly(x, y, xbox, ybox); mapshow(xi,yi,'DisplayType','point','Marker','o') ```

```% Display the intersection points; note that the point (12, 8) % appears twice because of a self-intersection near the end of % the first part of the polyline. [xi yi] ```
```ans = 3 5 5 8 8 8 12 8 12 8 13 7 4 2 13 5```
```% You could suppress this duplicate point by using the 'unique' % option. [xi, yi] = polyxpoly(x, y, xbox, ybox, 'unique'); [xi yi]```
```ans = 3 5 5 8 8 8 12 8 13 7 4 2 13 5```

Use the `polyxpoly` function to find the intersection points between the state of California and a small circle.

```california = shaperead('usastatehi',... 'UseGeoCoords', true,... 'Selector',{@(name) strcmpi(name,'California'), 'Name'}); usamap('california') geoshow(california, 'FaceColor', 'none') lat0 = 37; lon0 = -122; rad = 500; [latc, lonc] = scircle1(lat0, lon0, km2deg(rad)); plotm(lat0, lon0, 'r*') plotm(latc, lonc, 'r') [loni, lati] = polyxpoly(lonc, latc, ... california.Lon', california.Lat'); plotm(lati, loni, 'bo')```