Main Content

polybuffer

围绕点、线或 polyshape 对象创建缓冲区

说明

示例

polyout = polybuffer(P,'points',d) 返回一个 polyshape 对象,其边界与 P 中各个二维点形成距离为 d 的缓冲区。polybuffer 函数取圆心为 P 中各点、半径为 d 的圆的并集,以此计算缓冲区。矩阵 P 的第一列包含要缓冲的点的 x 坐标,第二列包含对应的 y 坐标。

创建 polyshape 对象 polyout 后,可以使用 polyshape 函数分析其属性或执行其他计算。例如,可以使用属性 polyout.Vertices 访问定义缓冲区形状的顶点,使用命令 plot(polyout) 绘制形状。

示例

polyout = polybuffer(P,'lines',d) 返回一个 polyshape 对象,该对象的边界对 P 中各个二维点定义的线段形成缓冲区。polybuffer 函数以输入点确定的线段为中心,沿线段平移一个半径为 d 的圆,以此计算缓冲区。

示例

polyout = polybuffer(P,'lines',d,'JointType',jt) 指定如何处理线段端点的汇合点(接头)。例如,polybuffer(P,'lines',d,'JointType','square') 对接头作切角处理。

当接头类型指定为 'miter' 时,polyout = polybuffer(P,'lines',d,'JointType','miter','MiterLimit',lim) 指定斜切限制。斜切限制是指接头顶点的移动距离与缓冲距离 d 之间允许的最大比率。限制 lim 必须大于或等于 2。

示例

polyout = polybuffer(polyin,d) 返回一个带边界的 polyshape 对象,该边界基于输入 polyshape 对象 polyin 以距离 d 创建缓冲区。对于正值 dpolyin 的实心区域边界扩大 d 个单位,孔边界缩小 d 个单位。负值 d 则缩小实心边界,扩大孔边界。

示例

polyout = polybuffer(polyin,d,'JointType',jt) 指定当第一个输入参量是 polyshape 时如何处理 polyshape 的接头。

当接头类型指定为 'miter' 且第一个输入参量为 polyshape 时,polyout = polybuffer(polyin,d,'JointType','miter','MiterLimit',lim) 指定斜切限制。

示例

全部折叠

创建一个矩阵,其中包含三个点的二维坐标。然后,创建一个 polyshape 对象,它以 0.25 个单位的距离缓冲每个点。

P = [0 0; 1 1; 2 1];
polyout = polybuffer(P,'points',0.25)
polyout = 
  polyshape with properties:

      Vertices: [542x2 double]
    NumRegions: 3
      NumHoles: 0

绘制原始点及其缓冲区。

plot(P(:,1),P(:,2),'r.','MarkerSize',10)
hold on
plot(polyout)
axis equal

围绕线段创建缓冲区。

创建一个包含二维点的矩阵,并计算对连接各点的线段形成缓冲区的 polyshape 对象。

P = [0 0; 1 1; 2 1];
polyout1 = polybuffer(P,'lines',0.25);
plot(P(:,1),P(:,2),'r.','MarkerSize',10)
hold on
plot(polyout1)
axis equal
hold off

默认情况下,polybuffer 会对线段接头作圆角处理。您可以使用 'JointType' 名称-值对组来控制接头的形状。例如,使用值 'miter' 来保留线段接头处的角度。

figure
polyout2 = polybuffer(P,'lines',0.25,'JointType','miter');
plot(P(:,1),P(:,2),'r.','MarkerSize',10)
hold on
plot(polyout2)
axis equal

创建具有实心边界和孔边界的多边形。然后在距离边界 0.1 个单位的地方创建一个缓冲区。默认情况下,缓冲区具有圆角接头。

polyin = polyshape({[0 0 1 3],[0.5 1.5 1.5 0.5]},{[0 3 3 0],[0.5 0.5 1.5 1.5]});
plot(polyin)
polyout1 = polybuffer(polyin,0.1);
hold on
plot(polyout1)
hold off

创建一个斜切限制为 2 的缓冲区。斜切限制控制接头的尖锐度。

polyout2 = polybuffer(polyin,0.1,'JointType','miter','MiterLimit',2);
plot(polyin)
hold on
plot(polyout2)

输入参数

全部折叠

二维顶点输入值,指定为 2 列数值矩阵。P 的第一列包含 x 坐标,第二列包含对应的 y 坐标。

输入 polyshape,指定为标量、向量、矩阵或多维数组。当 polyin 是由 polyshape 对象组成的数组时,polybuffer 将指定的缓冲区参数应用于每一个元素。

缓冲距离,指定为数值标量。

当第一个输入参量是一组顶点时,d 必须为正数值标量。

当第一个输入参量是 polyshape 时,d 可以是正数、负数或零:

  • 如果 d>0,实心边界将扩大 d,而孔边界会缩小。

  • 如果 d<0,实心边界将缩小 d,而孔边界会扩大。

  • 如果 d=0,则输入边界没有变化。

缓冲区边界的接头类型,指定为以下类型之一:

  • 'round' - 边角为圆角。

  • 'square' - 边角为切角。

  • 'miter' - 将接头顶点的移动距离与缓冲距离之比限制为 3。此限制可以防止边角过尖。

当第一个输入参量为一组顶点时,polybuffer 仅在两条线段端点相交处应用接头类型,不会应用于线段的开放端点处。

如果第一个输入参量为 polyshape,则当缓冲距离为正时,polybuffer 仅将接头类型应用于实心边界;当缓冲距离为负时,仅应用于孔边界。

斜切限制,指定为大于或等于 2 的正数值标量。斜切限制是指接头顶点的移动距离与缓冲距离之比。设置斜切限制可以控制边界接头的尖锐度。

扩展功能

基于线程的环境
使用 MATLAB® backgroundPool 在后台运行代码或使用 Parallel Computing Toolbox™ ThreadPool 加快代码运行速度。

版本历史记录

在 R2017b 中推出

另请参阅

|