2015-03-25 42 views
0

我想找到两个多边形之间的公共部分。我使用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是空的。该算法没有找到共同部分或剪切部分。这是为什么?任何人都可以澄清发生了什么?

回答

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.]; 

一个解决方案是改变顶点的顺序,f或像这样的例子:

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

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