5

ポイント (x、y、z) の配列があり、単一のポイント (x、y、z) が与えられた場合、そのポイントが配列によって定義された形状内にあるかどうかを判断するには、どのコードを使用すればよいでしょうか?

私はこれに空白を描いています...

私はC#を使用しています

編集

プロセスを非常によく説明するこのリンク( http://alienryderflex.com/polygon/ )を見つけたコメントから、応答してくれてありがとう。

ありがとう!

ご参考までに:

bool pointInPolygon() {
    
      int      i, j=polySides-1 ;
      boolean  oddNodes=NO      ;
    
      for (i=0; i<polySides; i++) {
        if (polyY[i]<y && polyY[j]>=y
        ||  polyY[j]<y && polyY[i]>=y) {
          if (polyX[i]+(y-polyY[i])/(polyY[j]-polyY[i])*(polyX[j]-polyX[i])<x) {
            oddNodes=!oddNodes; }}
        j=i; }
     
      return oddNodes; }

多少の手間はかかりますが、それが根性です。

再度、感謝します

4

3 に答える 3

16

形状の外側にあることがわかっている点を使用して、その点から特定の点までの線が形状の表面を通過するかどうかを確認します。通過する面の数が奇数の場合、指定された点は形状の内側にあります。

于 2011-02-10T21:51:34.270 に答える
2

グッファの答えに加えて、線が面と交差しているかどうかを判断するのは思ったより難しいです。その背後にある計算は次のとおりです。線と平面の交点。その基本的なアルゴリズムを使用する必要があります (各サーフェスのそのポイントへの法線を見つけ、法線と線の間の角度を決定して、3 番目のポイントを見つける直角三角形を形成します。WPF の Media3D ライブラリにはポイントに関する関数があります)。およびこれをすべて簡単にするベクトル)、次に、見つかったポイントが、そのサーフェスの境界内でサーフェスの平面と交差するかどうかを判断します。これを行うには、面積が 0 より大きいそのサーフェスの任意の 2D 投影を取得し、「ポリゴン内のポイント」テストを実行します。これは、実行しようとしている「多面体内のポイント」テストの 2D バージョンです。

幸運を。

于 2011-02-10T22:07:40.517 に答える