2012-02-23 16 views
3

私はあなたたちを尋ねる質問をした...三角形に特定の点が含まれているかどうかを調べる方法は?

は、今私は仮想グリッドをしたと言うことができます、と

Junction Points On Virtual Grid

下のショーが今することができますように私は、これらの仮想グリッド上の接合点を持っています仮想グリッドのポイントのいずれかがある場合は今、私は疑問に思う私は

Triangle with Points

下記のショーとして、この仮想グリッド上に三角形を描いたと言う にはが三角形で囲まれています... C#.Netを使用してこれをどのように達成できますか?

:私も三角形のためのポイントを知っている、との質問が2次元平面のため..です

よろしく...

+1

質問:これは常に三角形ですか?右の角度? – flq

+0

いいえ、そうではありません...私の答えが「はい」だったらどうしたらいいですか? –

+0

確かに分かりません;)しかし、三角形自体の単純な三角法では、ある線をかなり速く計算することができます。 – flq

答えて

3

GraphicsPathとしてあなたの三角形を定義し、このパスの共同どうかを判断するためにGraphicsPath.IsVisible(Point)メソッドを使用できます三角形here

希望の範囲内でありますポイントを把握する。

+0

フラッドフィルのようなアルゴリズムを使用しているため、単純なジオメトリでは非常に効率が悪いです。 –

+0

それは単純なようです..私もそれを試してみましょう。ありがとうございました... –

+0

+1簡単に – flq

7

ポイントならば、私は見つけるための一般的なアプローチを見つけましたこれは

+0

私はそれに目を向けるでしょう。 –

+0

これは、私が以下で思いついたのと同じ解決策ですが、はるかに良く説明しました。+1 –

3
  • あなたが三角形の三角形の内部ビーイング

内であることのための点Pをテストしたいとは同じにあるものとして解決することができ、あなたの三角形はポイントA、BおよびC

  • で構成されて言いますベクトルAB、BCおよびCAのすべての側(左または右)に配置される。だから

    • は、Z = 0とCAを3DベクトルAB、BCを作成します(これは一度だけ、三角形ごとに行う必要があります)
    • のz = 0と3DベクトルAP、BP、CPを作成します(これはしなければなりません)、点Pごとに一度
    • 計算p = ABxAP、Q = BCxBPおよびr = CAxCP(これは、点Pごとに一度行われなければならない)P場合

    あなたの点は、三角形の内側にある、Qを行うこととrは、それらのz座標上に同じ符号を持っています

  • +0

    ありがとう、私はそれを与えるでしょう。 –

    関連する問題