私は飛行機を形成するポイントのリストを持っています。私は連続した点の間にエッジを作成し、別のリストに追加したい。ここで最後の反復ステップが最初のオブジェクトに戻るようにリストを反復処理する方法は?
は、私が現在持っているコードは次のとおりです。
// Get points forming the plate
ArrayList points = part.points;
// Number of points forming the plate
int pointCount = points.Count;
// Create edges
List<LineSegment> edges = new List<LineSegment>();
for (int i = 0; i < pointCount - 1; i++)
{
// Get start and end points
Point start = points[i];
Point end = points[i+1];
// Create edge
LineSegment edge = new LineSegment(start, end);
// Add edge to the list
edges.Add(edge);
}
それが最後とリストの最初の点の間の最後のエッジを作成していないので、それは非常に動作しません。それを修正する方法は何でしょうか?私はそれがこのようなif文で動作させることができます:
for (int i = 0; i < pointCount; i++)
{
// Get start and end points
Point start = points[i] as Point;
Point end;
if (i == pointCount-1) end = points[0] as Point;
else end = points[i+1] as Point;
// Rest of the code here
}
しかし、私はそれを行うにはよりエレガントな方法があることを確認しています。 Pythonでは、最初の辺が実際に最後の点を最初の点に接続するように-1からループを開始しますが、これはC#では不可能です。
EDIT:ポイントリストはAPIによってArrayListとして与えられます。
質問以外は、 'ArrayList'の代わりに' List 'を使ってください。これにより、型付きのコレクションが得られます。 –
Habib
ループをそのままの状態に保ち、ループの外側で最後のステップを行うのはなぜですか?点[0]と点[points.Length-1]の間をリンクする、常に同じコマンドである必要があります。 –
downvoteについては分かりませんが、これはokの質問のようです。 – Habib