2015-03-25 59 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,:); 

您可以添加一個檢查,看看頂點運行的方式,並在必要時修改它們的順序。