마우스 포인터로 시계 방향으로 4 점을 표시하는 대화식 입력이 주어진다면, 그려진 모양이 사변형인지 아닌지 Matlab을 사용하여 확인해야합니다. 선물 포장 알고리즘을 제안한 사람들을 보았습니다. 내 생각은 방금 tan
을 사용하여 180도 이상의 각도를 가지면 모양이 볼록하지 않습니다. 더 좋은 방법을 제안 해 줄 수 있습니까? 나는 다음과 같은 코드를 참조 고맙겠 :convex square - 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
더 나은 점은 무엇입니까? 2 차원 평면의 4 점이 볼록한 모양인지 확인하는 것이 어렵지 않습니다. –
제 생각은 tan() = m2-m1/(1 + m1 * m2)를 사용하는 것이 었습니다. 이후로 나는 4 좌표, 나는 이것이 가장 쉬운 방법이라고 생각합니다. – Gilad
누구든지 내 코드에 어떤 문제가 있다고 말할 수 있습니까? 나는 볼록하지 않은 사변형 위에 그것을 시험해 보았고 볼록하다는 답을 얻는다. 나는 180보다 큰 degress를 얻지 못합니다 – Gilad