2017-02-18 9 views
0

私はこれのような2つの凸包を持っていると言います。Matlabで2つの凸包が交差しているかどうかを確認するにはどうすればよいですか?

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

ここで、x1、y1、x2、y2はベクトルです。

これらの2つの凸包をプロットすることはできますが、これらの2つの凸包が交差しているかどうかをどのように知ることができますか?私は別の.mファイルでこれを使うつもりであるので、視覚的にではなく、プログラムでそれを望みます。

注:これはすべてmatlabにあります。

+0

マッピングツールボックスにアクセスできますか? ['polyxpoly'](https://www.mathworks.com/help/map/ref/polyxpoly.html)を使うことができます。 – rayryeng

+0

いいえ、私はそれを持っていません。 – posixKing

+0

サザーランド・ホジマンを適用することができます: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); 

あなただけの2つのポリゴンが交差するかどうかについてのバイナリイエス/ノーの答えを探しているなら、

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

あなたが実際にポイントが必要な場合は、CinDxC,yCDinCのインデックスが含まれていますxD,yDのインデックスが含まれています。

これはツールボックスを必要としませんが、凸包のすべての点をチェックする必要がありますが、CinDにポイントが含まれていて、はい/いいえの答えを探しているときにショートカットできます。

関連する問題