主要内容

本页采用了机器翻译。点击此处可查看英文原文。

polyxpoly

直线或多边形边界的交点

说明

[xi,yi] = polyxpoly(x1,y1,x2,y2) 在平面笛卡尔坐标系中返回两条折线的交点,其顶点由 x1y1x2y2 定义。输出参数 xiyi 包含每个点的第一折线线段与第二折线线段相交时的 xy 坐标。对于重叠的共线线段,其交点实际上是一条线段而非一个点,且两个端点均包含在 xiyi 中。

示例

[xi,yi,ii] = polyxpoly(___) 返回一个两列数组,其中各列分别对应于相交点的线段索引。第 k 行中的 ii 标识出哪些折线段构成了交点 xi(k)yi(k)

要记住这些索引的工作原理,只需将线段和顶点想象成栅栏的横档和立柱。第 i 段栅栏连接第 i 根立柱与第 (i+1) 根立柱。一般而言,若用 ij 表示 ii 的第 k 行所包含的标量值,则该行所指示的交点位于第一条折线第 i 段与第二条折线第 j 段的相交处。但当交点恰好落在第一条折线的一个顶点上时,则 i 即为该顶点的索引。同样地,对于第二条折线和索引 j 也是如此。例如,在第一条线的第 i 个顶点处发生交叉时,xi(k) 等于 x1(i),且 yi(k) 等于 y1(i)。在顶点相交的情况下,ij 可解释如下:连接 x1(i)y1(i)x1(i+1)y1(i+1) 的线段与连接 x2(j)y2(j)x2(j+1)y2(j+1) 的线段在点 xi(k) 相交,yi(k)

[xi,yi] = polyxpoly(___,'unique') 过滤掉重复的交点,这些交点可能由输入折线自相交导致。

示例

示例

全部折叠

在平面上定义并填充一个矩形区域。

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')

定义并显示一个两部分的折线。

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','+')

将折线与矩形相交。

[xi,yi] = polyxpoly(x,y,xbox,ybox);
mapshow(xi,yi,'DisplayType','point','Marker','o')

Figure contains an axes object. The axes object contains 3 objects of type patch, line. One or more of the lines displays its values using only markers

显示交点;请注意点 (12, 8) 出现两次,这是因为在折线的第一部分末端附近存在自交现象。

[xi yi]
ans = 8×2

    3.0000    5.0000
    5.0000    8.0000
    8.0000    8.0000
   12.0000    8.0000
   12.0000    8.0000
   13.0000    7.0000
   13.0000    5.0000
    4.0000    2.0000

您可以通过使用 'unique' 选项来抑制此重复点。

[xi,yi] = polyxpoly(x,y,xbox,ybox,'unique');
[xi yi]
ans = 7×2

    3.0000    5.0000
    5.0000    8.0000
    8.0000    8.0000
   12.0000    8.0000
   13.0000    7.0000
   13.0000    5.0000
    4.0000    2.0000

对加利福尼亚州进行地理编码。geocode 函数创建了一个地理空间表,其中包含加利福尼亚州的多边形形状。在地图上显示多边形。

california = geocode("California");

figure
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")

从地理空间表中提取加利福尼亚多边形的纬度和经度坐标。

T = geotable2table(california,["Latitude","Longitude"]);
[lat,lon] = polyjoin(T.Latitude',T.Longitude');

找出加利福尼亚州与小圆圈之间的交点。

[loni,lati] = polyxpoly(lon,lat,lonc,latc);
plotm(lati,loni,"bo")

Figure contains an axes object. The hidden axes object contains 17 objects of type patch, line, text. One or more of the lines displays its values using only markers

输入参数

全部折叠

第一第或第二第折线中点的 xy 坐标,指定为数值向量。对于给定的折线,xy 坐标向量必须具有相同的长度。

输出参量

全部折叠

交点的 xy 坐标,指定为数值列向量。

线段上相交点的索引,指定为数值向量。

提示

  • 若点间距较大,polyxpoly 函数计算出的交点与地图显示的交点可能存在差异。这是由于未投影坐标系与投影坐标系中直线之间的差异所致。同样地,polyxpoly 的结果与假设点间为大圆航线或恒向线所计算的交点之间可能存在差异。

版本历史记录

在 R2006a 之前推出

另请参阅

| | | | |