2016-05-18 18 views
0

2次元平面上に点のセット(std::pairdouble)があり、それに閉じた輪郭(正方形、円、多角形など)を適用したいと思います。 ポイントがマスク(またはマスクの下)に含まれている場合は表示されず、そうでない場合は表示されます。例えばC++/Qtの閉じた輪郭

マスク(m_x,m_y)その左上隅の座標とm_widthm_heightその幅と高さを持つ長方形である場合、点は、マスクに含まれることになる(と表示されてはならない)場合:

単純な形状のために
if (x >= m_x && x <= m_x + m_width && y >= m_y && y <= m_y + m_height) 
     return true; 

(長方形、円)それは難しいことではありません、いますが、それをどのように行うだろう/あなたが多角形のような、より困難な形状を検討するのに使うだろうか? Qt(5.6)はそうしていますか?あるいはOpenCvのようなものを使うべきですか?

EDIT 1

STDはそれをやっている場合

QtはQPolygonFクラス(おかげオーレリアン)でそれを行うことができますが、あなたが知っているのですか?私たちはstd以外のライブラリを使用せずにデータライブラリを実装しました。

+0

いいえ、C++標準ライブラリはいずれも含みませんジオメトリプリミティブ。 –

答えて

3

QPolygonFクラスを使用できます。

QPolygonF :: containsPointメソッドがあります。

編集

私はそれを行うための任意のSTD方法を知りませんが、それが実現するのは簡単です:

Point in Polygon Algorithm

http://www.codeproject.com/Tips/84226/Is-a-Point-inside-a-Polygon

+0

ありがとう、それは仕事をすることができます!私は私の質問を編集 – ElevenJune

+0

完璧、ありがとう! – ElevenJune

+0

複数の図形(楕円を含む)を組み合わせることができる 'QPainterPath'と' contains'メソッドもあります。 –