我想在两个多边形之间找到共同点。我使用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 :(得分: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,:);
您可以添加一个检查以查看顶点的运行方式,并在必要时修改其顺序。