2017-02-18 3 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); 

Если вам нужны реальные точки, CinD содержит индексы для xC,yC и DinC содержит индексы для xD,yD.

Хотя это не требует каких-либо панелей инструментов, для этого требуется проверка всех точек на обоих выпуклых корпусах, хотя вы можете сократить это, если CinD содержит какие-либо пункты, и вы просто ищете ответ «да/нет».

Смежные вопросы