Sutherland-Hodgman多边形剪辑不工作

时间:2015-03-25 01:35:00

标签: matlab

我想在两个多边形之间找到共同点。我使用this算法

代码适用于链接中的示例。但我尝试在我的例子中使用它(简单的旋转方块)它不起作用:

subject =[434.0774  239.3566
          414.1666  237.4698
          412.2798  257.3806    
          432.1906  259.2674
          434.0774  239.3566];


clipPolygon = subject;

clipPolygon = clipPolygon + 2;

clippedSubject = sutherlandHodgman(subject, clipPolygon);                    

figure;
plot(subject(:,1),     subject(:,2), 'b-');
hold on;
plot(clipPolygon(:,1), clipPolygon(:,2), 'r-');

显示两个正方形here,它清楚地表明,当它们重叠时,应该可以用第二个正方形剪切一个正方形。

问题是clippedSubject为空。该算法没有找到共同部分或剪切部分。这是为什么?任何人都可以澄清发生了什么吗?

1 个答案:

答案 0 :(得分:0)

问题的根源是函数inside中的要求(阅读源代码):

%inside() assumes the boundary is oriented counter-clockwise
function in = inside(point,boundary) 

这意味着这组顶点将导致错误:

subject =[ 24.  19.
            4.  19.
            4.   47.    
           24.   47.];

而这不是:

subject =[ 24.  19.
            4.  19.
            4.   7.    
           24.   7.];

一种解决方案是改变顶点的顺序,例如:

subject = subject(end:-1:1,:);

您可以添加一个检查以查看顶点的运行方式,并在必要时修改其顺序。