2017-02-18 7 views
0

Angenommen, ich habe zwei konvexe Rümpfe wie diese.Wie überprüft man, ob zwei konvexe Rümpfe in Matlab einen Schnittpunkt haben?

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

wobei x1, y1, x2, y2 Vektoren sind.

Jetzt kann ich diese beiden konvexen Rümpfe plotten, aber wie kann ich wissen, ob diese beiden konvexen Rümpfe Schnittpunkt haben? Ich will es in einem Programm, nicht visuell, da ich plane, dies in einer anderen .m Datei zu verwenden.

Hinweis: Dies ist alles in Matlab.

+0

Haben Sie Zugriff auf die Mapping-Toolbox? Sie können ['polyxpoly'] (https://www.mathworks.com/help/map/ref/polyxpoly.html) verwenden. – rayryeng

+0

Nein, das habe ich nicht. – posixKing

+0

können Sie Sutherland-Hodgman finden Sie hier: http://rosettacode.org/wiki/Sutherland-Hodgman_polygon_clipping#MATLAB_.2F_Octave – bla

Antwort

1

Der einfachste Weg, obwohl nicht unbedingt der effizienteste, ist die Verwendung 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); 

Wenn Sie gerade für ein binäres Ja/Nein-Antwort auf die Frage, ob die beiden Polygone schneiden,

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

suchen Wenn Sie die tatsächlichen Punkte benötigen, enthält CinD die Indizes für xC,yC und DinC enthält die Indizes für xD,yD.

Während dies keine Werkzeugkästen erfordert, müssen alle Punkte auf beiden konvexen Rümpfen überprüft werden, obwohl Sie die Abkürzung verwenden können, wenn CinD Punkte enthält und Sie nur nach einer Ja/Nein-Antwort suchen.

Verwandte Themen