1

接続された線分のリストがあります。ポリゴンの取得方法。

let lines = [
    [10, 10, 200, 10],
    [10, 10, 10, 200],
    [10, 200, 200, 10],
    [200, 10, 390, 10],
    [200, 10, 390, 200],
    [390, 10, 390, 200],
    [10, 200, 10, 390],
    [390, 200, 390, 390],
    [10, 390, 390, 390],
    [200, 10, 200, 200],
    [10, 200, 200, 200],
];

サンプル コードの視覚化:

ここに画像の説明を入力

// poly 1 would be something like this.
poly1 = [
    [10, 10],
    [200, 10],
    [10, 200],
];
4

1 に答える 1

2

ソリューションを次のように構成します。

  1. の各要素をlines調べて、1 つの行を他の行と一致させます。たとえば、要素 1 と 2 は [10,10] で一致します。
  2. 1. から取得した行の各ペアを調べてlines、一致しない開始点/終了点の行のペアに一致する 3 番目の行を探します。たとえば、要素 1 と 2 はそれぞれ [200,10] と [10,200] で一致しない開始点/終了点を持ち、これは要素 3 と一致します。

コード的には、最良の構造は次のとおりだと思います。

  • matchCoordinates(coordinateA,coordinateB)2 つの座標ペアを取り、ブール値の一致を返す1 つの関数。
  • matchLines(lineA,lineB)から 2 つの要素を取得し、一致する行を見つけるためlinesに利用する1 つの関数matchCoordinates
  • findMissingLine(lineA,desiredLine)ブール値を返す1 つの関数lineAは と同じdesiredLineです。ここでは、要素 3linesが [10, 10, 200, 10] と [200, 10, 10, 10] の両方であるエッジケースを含めます。
于 2020-04-12T07:33:17.527 に答える