2017-02-18 13 views
0

이렇게 두 개의 볼록한 선체가 있습니다.Matlab에서 두 개의 볼록 선체가 교차하는지 확인하는 방법은 무엇입니까?

C=convhull(x1, y1); 
D=convhull(x2, y2); 

여기서, x1, y1, x2, y2는 벡터이다.

이제이 두 개의 볼록 선체를 플로팅 할 수 있지만이 두 개의 볼록 선체가 교차하는지 어떻게 알 수 있습니까? 이 파일을 다른 .m 파일에서 사용할 계획이므로 시각적으로 프로그램이 아니라 프로그램에서 사용하고 싶습니다.

참고 : 이것은 모두 matlab에 있습니다.

+0

매핑 도구 상자에 액세스 할 수 있습니까? ['polyxpoly'] (https://www.mathworks.com/help/map/ref/polyxpoly.html)를 사용할 수 있습니다. – rayryeng

+0

아니, 그럴 필요 없어. – posixKing

+0

Sutherland-Hodgman을 적용 할 수 있습니다. http://rosettacode.org/wiki/Sutherland-Hodgman_polygon_clipping#MATLAB_.2F_Octave – bla

답변

1

아마 가장 효율적인 방법은 아니지만 가장 간단한 방법은 inpolygon을 사용하는 것입니다. 그냥 바이너리 예를 찾고 있다면

C=convhull(x1, y1); 
D=convhull(x2, y2); 

xC = x1(C); yC = y1(C); 
xD = x2(D); yD = y2(D); 
CinD = inpolygon(xC, yC, xD, yD); 
DinC = inpolygon(xD, yD, xC, yC); 

은/두 개의 다각형이 교차 여부에 아무 대답은

CDintersect = any(CinD) || any(DinC); 

당신이 실제 포인트가 필요한 경우, CinDxC,yCDinC에 대한 인덱스를 포함하지 않는 xD,yD에 대한 색인이 들어 있습니다.

두 도구 상자가 필요하지는 않지만 볼록 선체의 모든 점을 확인해야하지만 CinD에 점이 포함되어 있고 예/아니오 대답을 찾고있는 경우 바로 가기가 가능합니다.