将共线点添加到多边形(Matlab)

时间:2019-01-25 14:51:11

标签: matlab polygon

我想做其他人通常避免的事情: 我有两个多边形(多边形对象),layer1layer2layer1将通过两个多边形的交点扩展。根据定义,这些点与layer1的边缘共线。我希望它适用于任何多边形。

示例:

假设两个多边形的定义如下:

square = polyshape([0,0;0,6;6,6;6,0]);
layer1 = addboundary(square, [1,2,5,4], [1,1,5,5]);
layer2 = addboundary(square, [4,5,2,1], [1,1,5,5]);

添加扩展名后的预期结果:

>> layer1.Vertices

ans =

         0         0
         0    6.0000
    6.0000    6.0000
    6.0000         0
       NaN       NaN
    1.0000    1.0000
    2.0000    1.0000
    3.0000    2.3333
    3.5000    3.0000
    5.0000    5.0000
    4.0000    5.0000
    3.0000    3.6667
    2.5000    3.0000

解决方法:

Matlab提供了两个有前途的工具:可以指示每个布尔函数(相交,并集,异或,相减)保持共线点。每个布尔函数还返回shapeIDvertexID,告诉您每个点的来源。

  • 起初,我认为用shapeID == 0添加所有点就足够了。但是我不知道如何将这些额外的点与现有的点按正确的顺序放置。
  • 所以我尝试了一些结合布尔函数的东西。 layer1 = union(layer1, subtract(layer1, layer2), 'KeepCollinearPoints', true); 不能捕获所有交叉点(出于我不了解的原因-它适用于layer2 = union(layer2, subtract(layer2, layer1), 'KeepCollinearPoints', true);)。
  • 类似

    [layer1,shapeID,~] = intersect(layer1,layer2);
    layer1 = polyshape(layer1.Vertices(shapeID~=2,:), 'KeepCollinearPoints', true);
    

    似乎可行,但并非对所有多边形都有效(例如layer1 = addboundary(square, [1,5,2.5], [2,2,4]);并非理想结果)

我觉得必须为我尚未发现的问题找到一个优雅的解决方案。感谢您的帮助。

0 个答案:

没有答案
相关问题