给定一个用鼠标指针顺时针方向标记4点的交互式输入,我需要用Matlab检查绘制的图形是否是四边形的凸形。我看到一些人提出了礼品包装算法。我的想法只是使用tan
,如果我有一个大于180度的角度,形状不是凸面。 你能提出一个更好的方法来做到这一点吗?我会感激你参考下面的代码:凸平方 - matlab
showImage(imageA)
hold on
% Initially, the list of points is empty.
xy = [];
n = 0;
% Loop, picking up the points.
disp('Please enter corners of place to insert image in clockwise order.')
for i = 1:4
[xi,yi] = ginput(1);
plot(xi,yi,'yo')
xy(:,i) = [xi;yi];
end
%check if this is a convex quadrillateral
a1 = (xy(2,2) - xy(2,1))/(xy(1,2) - xy(1,1));
a2 = (xy(2,3) - xy(2,2))/(xy(1,3) - xy(1,2));
a3 = (xy(2,4) - xy(2,3))/(xy(1,4) - xy(1,3));
a4 = (xy(2,1) - xy(2,4))/(xy(1,1) - xy(1,4));
tan1 = abs(atand((a2-a1) /(1+a1*a2)));
tan2 = abs(atand((a3-a2)/(1+a3*a2)));
tan3 = abs(atand((a4-a3)/(1+a4*a3)));
tan4 = abs(atand((a1-a4)/(1+a1*a4)));
if ((tan1 > 180) | (tan2 > 180) | (tan3 > 180) | (tan4 > 180))
disp('this is not a convex quadrillateral!!')
end
你的意思是说更好?不应该很难确定2D平面上的四个点是否为凸形。 –
我的想法是使用tan()= m2-m1 /(1 + m1 * m2)。因为我有4个坐标,我认为这将是最简单的方法。 – Gilad
任何人都可以告诉我我的代码有什么问题吗?我已经尝试过非凸四极管,我得到一个答案,它是一个凸。我不会超过180 – Gilad