2026b

# intersect


polyshape 对象的交集

函数库: TyMath

# 语法

polyout, = intersect(poly1,poly2)
polyout, = intersect(polyvec)
polyout,shapeID,vertexID = intersect(poly1,poly2)
polyout,shapeID,vertexID = intersect(polyvec)
in,out = intersect(poly1,lineseg)

# 说明

polyout, = intersect(poly1,poly2) 返回一个 polyshape 对象,它的区域是两个 polyshape 对象的几何交集。交集包含 poly1 和 poly2 的重叠区域。poly1 和 poly2 必须具有兼容的数组大小。示例

polyout, = intersect(polyvec) 返回一个 polyshape 对象,它的区域是向量 polyvec 中所有 polyshape 对象的交集。交集包含 polyvec 中所有 polyshape 对象的重叠区域。示例

polyout,shapeID,vertexID = intersect(poly1,poly2) 还会返回从 polyout 中的顶点到 poly1 和 poly2 中的顶点的顶点映射信息。仅当 poly1 和 poly2 是标量 polyshape 对象时,intersect 函数才支持此语法。 shapeID 元素标识 polyout 中对应的顶点是源于 poly1、poly2,还是因相交而产生的。vertexID 将 polyout 的顶点映射到 poly1、poly2 或交集的顶点。示例

polyout,shapeID,vertexID = intersect(polyvec) 返回从 polyout 到 polyshape 对象向量 polyvec 的每个元素的顶点映射信息。

in,out = intersect(poly1,lineseg) 返回 lineseg 位于 poly1 内部和外部的线段。矩阵 lineseg 包含两列。第一列定义线段的 x 坐标,第二列定义对应的 y 坐标。 仅当 poly1 是标量 polyshape 且 lineseg 不包含自相交时,intersect 才支持此语法。示例

# 示例

两个多边形的交集

创建并绘制两个多边形。

using TyMath
using TyPlot
poly1 = polyshape([0,0,1,1],[1,0,0,1]);
poly2 = polyshape([0.75,1.25,1.25,0.75],[0.25,0.25,0.75,0.75]);
plot(poly1)
hold("on")
plot(poly2)
figure()
polyout, = intersect(poly1,poly2)
Vertices: [0.75, 0.75, 1.0, 1.0][0.25, 0.75, 0.75, 0.25]
NumRegions: 1
NumHoles: 0
plot(polyout)
xlim([-0.2,1.4]);
ylim([-0.2,1.2]);
多边形向量

创建包含两个多边形的向量。

using TyMath
using TyPlot
polyarray1  = polyshape([0,0,1,1],[1,0,0,1]);
polyarray2  = polyshape([0.75,1.25,1.25,0.75],[0.25,0.25,0.75,0.75]);
polyvec = [polyarray1,polyarray2]
polyvec = 2-element Vector{TyComputationalGeometry.PolyShape.Polyshape}
plot(polyvec[1])
hold("on")
plot(polyvec[2])
figure()

计算 poly1 的元素的交集。

polyout, = intersect(polyvec)
Vertices: [0.75, 0.75, 1.0, 1.0][0.25, 0.75, 0.75, 0.25]
NumRegions: 1
NumHoles: 0
plot(polyout)
xlim([-0.2 1.4]);
ylim([-0.2 1.2]);
顶点映射

创建两个多边形并计算其交集。显示交集的顶点坐标和对应的顶点映射信息。

using TyMath
using TyPlot
polyarray1  = polyshape([0,0,1,1],[1,0,0,1]);
polyarray2  = polyshape([0.75,1.25,1.25,0.75],[0.25,0.25,0.75,0.75]);
polyout,shapeID,vertexID = intersect(polyarray1,polyarray2);
hcat(polyout.Vertices.X, polyout.Vertices.Y, shapeID, vertexID)
ans = 4×4 Matrix{Float64}:
0.75  0.25  2.0  1.0
0.75  0.75  2.0  2.0
1.0   0.75  0.0  0.0
1.0   0.25  0.0  0.0

交集的前两个顶点源于 poly2,因为 shapeID 中的对应值为 2。这些顶点分别是属性 poly2.Vertices 中的第一个和第二个顶点,因为它们在 vertexID 中的对应值是 1 和 2。polyout 的后两个顶点是因相交而产生的,因为 shapeID 和 vertexID 中的对应值为 0。

多边形和线的交集
using TyMath
using TyPlot
poly1 = polyshape([0, 0, 1, 1], [1, 0, 0, 1])
lineseg = [0.5 0.5; 1.5 1.5]

计算该多边形与线段的交集,并确定线段的哪些部分在多边形的内部,哪些在其外部。

in1,out1 = intersect(poly1,lineseg);
plot(poly1)
hold("on")
plot(in1[:, 1], in1[:, 2], "b", out1[:, 1], out1[:, 2], "r")
legend(["Polygon", "Inside", "Outside"]; loc="northwest")

# 输入参数

poly1 — 第一个输入 polyshape
标量 | 向量 | 矩阵 | 多维数组

第一个输入 polyshape,指定为标量、向量、矩阵或多维数组。

数据类型: polyshape

poly2 — 第二个输入 polyshape
标量 | 向量 | 矩阵 | 多维数组

第二个输入 polyshape,指定为标量、向量、矩阵或多维数组。

数据类型: polyshape

polyvec — polyshape 向量
标量 | 向量 | 矩阵 | 多维数组

第二个输入 polyshape,指定为标量、向量、矩阵或多维数组。

数据类型: polyshape

lineseg — 线段坐标
两列矩阵

线段坐标,指定为两列矩阵。第一列定义线段的 x 坐标,第二列定义 y 坐标。lineseg 必须至少有两行且不包含自相交。

数据类型: Int64 | Int32 | Int16 | Int128 | Float16 | Float32 | Float64 | UInt8 | UInt16 | UInt32 | UInt64

# 输出参数

polyout — 输出 polyshape
标量 | 向量 | 矩阵 | 多维数组

输出 polyshape,以标量、向量、矩阵或多维数组形式返回。

  • 如果输入两个 polyshape 参量,则它们必须具有兼容的大小。例如,如果两个输入 polyshape 向量具有不同的长度 M 和 N,则它们必须有不同的方向(一个必须是行向量,一个必须是列向量)。polyout 则是 M×N 或 N×M,具体取决于每个输入向量的方向;
  • 如果您提供单个输入参量 polyvec,则 polyout 是一个标量 polyshape 对象。

数据类型: polyshape

shapeID — 形状 ID
列向量

形状 ID,以列向量形式返回,其各个元素表示交集中顶点的来源。

  • shapeID 的长度等于输出 polyshape 的 Vertices 属性中的行数;

  • shapeID 的元素取决于输入参量的数量:

    • 如果您提供两个输入参量 poly1 和 poly2,则它们必须是标量 polyshape 对象。如果输出 polyshape 的顶点是因相交而产生的,则 shapeID 中对应元素的值为 0。当顶点源于 poly1 时,对应元素为 1,当顶点源于 poly2 时,对应元素为 2;

    • 如果您提供一个输入参量 polyvec(polyshape 对象向量),则 shapeID 包含作为输出顶点来源的对应 polyvec 元素的索引。如果顶点是因相交而产生的,则对应元素的值为 0。

数据类型: Float16 | Float32 | Float64

vertexID — 顶点 ID
列向量

顶点 ID,以列向量形式返回,其元素将输出 polyshape 中的顶点映射到来源的 polyshape 中的顶点。vertexID 的元素包含输入 polyshape 的 Vertices 属性中对应顶点的行号。如果输出 polyshape 的顶点是因相交而产生的,则对应元素为 0。

vertexID 的长度等于输出 polyshape 的 Vertices 属性中的行数。如果您提供两个输入 polyshape 对象,则 intersect 仅在它们都是标量时才支持此输出参量。

数据类型: Float16 | Float32 | Float64

in — 内部坐标
两列矩阵

内部线段坐标,以两列矩阵形式返回。in 的第一列包含位于输入 polyshape 内部的线段的 x 坐标,第二列包含对应的 y 坐标。

数据类型: Float16 | Float32 | Float64

out — 外部坐标
两列矩阵

外部线段坐标,以两列矩阵形式返回。out 的第一列包含位于输入 polyshape 外部的线段的 x 坐标,第二列包含对应的 y 坐标。

数据类型: Float16 | Float32 | Float64

# 另请参阅

polyshape | xor