2017-03-06 14 views
0

ライン上の隣接ポイントを見つけることに問題があります。隣のライン/ポリラインのポイントを見つける方法C#

私はポリラインとポイントを持っています。ポイントは常にライン上にとどまります。線は常に直線です(斜めではありません)。

私は前と次の点を見つけたいと思います。 (画像上ではCとDです)。これを行う最善の方法は何ですか?以前のポイントを見つける方が良いかもしれません(次のポイントを見つけるのは簡単です)。

私の考えは、使用ループとifステートメントでしたが、もっと良い解決策が存在するのでしょうか?ここで

enter image description here

+0

「最近傍点」クエリを探しています。 –

+0

「直線(斜体ではない)」とは、「直交」(つまり、水平または垂直のみ)を意味しますか?とにかく、ループを使うのが最善の方法でしょう。 –

+0

はい、直交のみです。私は 'foreach'ループを使って 'for'ループのために2回使うべきです(縦と横に対して)? – Slawkoo

答えて

0

あなたはint型の値にあなたのグリッドに合うことができる場合は素朴なソリューションです。それは、線が二乗螺線のように「成長」していない場合をカバーするはずです。 doubleに切り替えるときに、丸めの問題が発生する可能性があることに注意してください。

  var line = new List<Point> 
     { 
      new Point("A", 0, 0), 
      new Point("B", 1, 0), 
      new Point("C", 1, 1), 
      new Point("D", 3, 1), 
      new Point("E", 3, 2), 
      new Point("F", 4, 2) 
     }; 

     var p = new Point("P",2,1); 

     Point first = null; 
     foreach (var point in line) 
     { 
      if (first != null) 
      { 
       if (p.X == first.X && p.X == point.X 
        && (p.Y >= first.Y && p.Y <= point.Y 
         || p.Y <= first.Y && p.Y >= point.Y)) 
       { 
        PrintResult(first, p, point); 
        break; 
       } 

       if (p.Y == first.Y && p.Y == point.Y 
        && (p.X >= first.X && p.X <= point.X 
         || p.X <= first.X && p.X >= point.X)) 
       { 
        PrintResult(first, p, point); 
        break; 
       } 

      } 

      first = point; 
     } 

     Console.ReadKey(); 
    } 

    private static void PrintResult(Point first, Point p, Point second) 
    { 
     Console.WriteLine(first.Name); 
     Console.WriteLine(p.Name); 
     Console.WriteLine(second.Name); 
    } 
関連する問題