メインコンテンツ

このページは機械翻訳を使用して翻訳されました。元の英語を参照するには、ここをクリックします。

polyxpoly

ラインまたはポリゴンエッジの交点

説明

[xi,yi] = polyxpoly(x1,y1,x2,y2) は、平面の直交座標系における 2 つのポリラインの交点を返します。頂点は x1y1x2y2 で定義されます。出力引数 xiyi には、最初のポリラインのセグメントが 2 番目のポリラインのセグメントと交差する各ポイントの x 座標と y 座標が含まれます。重なり合う同一線分の場合には、交差点は実際には点ではなくライン セグメントとなり、両方の端点は xiyi に含まれます。

[xi,yi,ii] = polyxpoly(___) は、交点に対応するライン セグメント インデックスの 2 列の配列を返します。iik 行目は、どのポリライン セグメントが交点 xi(k)yi(k) を生じるかを示します。

これらのインデックスがどのように機能するかを覚えるには、セグメントと頂点をフェンスのセクションとポストとして考えます。i 番目のフェンス セクションは、i 番目のポストを (i+1) 番目のポストに接続します。一般に、ijiik 番目の行に含まれるスカラー値を表すとすると、その行で示される交差は、最初のポリラインの i 番目のセグメントが 2 番目のポリラインの j 番目のセグメントと交差する場所で発生します。しかし、交差点が最初のポリラインの頂点と正確に重なる場合、i はその頂点のインデックスになります。2 番目のポリラインとインデックス 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')

2 つの部分からなるポリラインを定義して表示します。

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) が 2 回表示されることに注意してください。

[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 関数は、カリフォルニアのポリゴン形状を含む地理空間tableを作成します。地図上にポリゴンを表示します。

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

地理空間tableからカリフォルニアポリゴンの緯度と経度の座標を抽出します。

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

入力引数

すべて折りたたむ

x または y は、数値ベクトルとして指定された、最初または 2 番目のポリラインの点の座標です。特定のポリラインの場合、x 座標ベクトルと y 座標ベクトルの長さは同じである必要があります。

出力引数

すべて折りたたむ

交点の x または y 座標。数値列ベクトルとして指定されます。

交点のライン セグメント インデックス。数値ベクトルとして指定します。

ヒント

  • ポイント間の間隔が大きい場合、polyxpoly 関数によって計算された交差点と地図表示上に表示される交差点が異なる場合があります。これは、投影されていない座標と投影された座標の直線間の差によって生じます。同様に、polyxpoly の結果と、点間の大円または等角線を想定する交差との間にも相違がある可能性があります。

バージョン履歴

R2006a より前に導入