重なり合う長方形のリストがあります。重複するすべての長方形が返されるリストのリストを見つける必要があります。たとえば、7 つの長方形のリストで、4 つの長方形が重なり、残りが分離している場合、リストのリストは次のようになります。
[0]: r1, r2, r3, r4
[1]: r5
[2]: r6
[3]: r7
ヒットテストを実行する必要があることはわかっています。チェーンを作成するアルゴリズムまたは例を探しています。
ありがとう
私はこのコードを試しました:時々それは動作しますが、時々、インデックスがバインドされていない例外をスローします。
while (rects.Count != 0)
{
listOfRects.Add(joinRectangles(rects, new List<Rectangle>(), rects[rects.Count - 1]));
}
private List<Rectangle> joinRectangles(List<Rectangle> rects, List<Rectangle> tempRects, Rectangle curRect)
{
for (int j = rects.Count; j-- > 0; )
{
if (hitTest(curRect, rects[j]) == true)
{
if (tempRects.Contains(rects[j]) == false)
{
tempRects.Add(rects[j]);
curRect = rects[j];
rects.Remove(rects[j]);
j--;
joinRectangles(rects, tempRects, curRect);
}
}
}
return tempRects;
}
これらの座標を指定すると、次のような 4 つのリストのリストを取得する必要があります。
[0]: 1 rectangle
[1]: 3 rectangles
[2]: 1 rectangle
[3]: 1 rectangle
<?xml version="1.0" encoding="utf-16"?>
<rectangles>
<rectangle>
<X1>50.833333344375</X1>
<Y1>100</Y1>
<X2>53.833333344375</X2>
<Y2>127.00000004975</Y2>
</rectangle>
<rectangle>
<X1>136.500000033125</X1>
<Y1>100</Y1>
<X2>139.516666655625</X2>
<Y2>127.00000004975</Y2>
</rectangle>
<rectangle>
<X1>50.833333344375</X1>
<Y1>130.647222172472</Y1>
<X2>53.833333344375</X2>
<Y2>157.647222222222</Y2>
</rectangle>
<rectangle>
<X1>136.500000033125</X1>
<Y1>130.647222172472</Y1>
<X2>139.516666655625</X2>
<Y2>157.647222222222</Y2>
</rectangle>
<rectangle>
<X1>136.500000033125</X1>
<Y1>100</Y1>
<X2>139.516666655625</X2>
<Y2>157.3333333830833</Y2>
</rectangle>
<rectangle>
<X1>179.3333333775</X1>
<Y1>100</Y1>
<X2>182.3333333775</X2>
<Y2>157.3333333830833</Y2>
</rectangle>
</rectangles>