向内偏移多边形,不需要严格保持形状

时间:2016-11-07 23:11:29

标签: algorithm matlab computational-geometry polygons

我从一个多边形开始,蓝色轮廓。然后想要继续缩小它的内部4个深度。所以在下一次迭代中,我将获得类似绿色轮廓的东西。请注意,多边形的形状至少保持为我想要表示的形状。使用Emmett的Polygon Clipping和Offsetting Matlab包装器可以很容易地完成此步骤,用于Angus的c ++ Clipper Library。

但是,在下一步中,我想进一步缩小绿色多边形。但是,在保持绿色轮廓的形状的同时,绿色多边形不能进一步收缩。因此,算法应自适应地收缩到品红色轮廓。这就是我的想法。动机来自于在地图中绘制轮廓。只要自适应过程生成的轮廓看起来足够逼真,我就不会特别注意要进行洋红色轮廓的形状修改。

enter image description here

我在Matlab工作,并且在这个方向上寻找可用的东西,而不是从头开始编写代码。多边形的大多数向内偏移工具保持形状,同时缩小:

enter image description here

将多边形缩小为一个较小的多边形的建议会很有帮助。允许修改形状。

用于创建上图的代码是:

p=[110 80;65 391;438 425;120 329];
ngon.x=p(:,1);
ngon.y=p(:,2);

scale=2^15;
ngon.x=int64(ngon.x*scale);
ngon.y=int64(ngon.y*scale);
outtie=clipper(ngon,ngon,1);% perform redundant self-intersection (required)

outtie.x=int64(outtie.x);
outtie.y=int64(outtie.y);
offset=clipper(outtie,-10*scale,1);
innie.x=offset.x/scale;
innie.y=offset.y/scale;
innie.x=[innie.x;innie.x(1)];
innie.y=[innie.y;innie.y(1)];

figure;
hold on
fill(ngon.x,ngon.y,'y')
plot(innie.x,innie.y,'r','linewidth',2)

要获得限幅器功能,请参阅here

0 个答案:

没有答案