私は、それぞれが物理的オブジェクトを表すポリゴンの複数のリストを持っています。たとえば、交差による多角形の任意の数のグループ化 - C#
List<CurveLoop> A
は、穴がある矩形を表すことができます。このリスト内の1つの曲線は長方形の輪郭であり、別の曲線は穴である。
リストのリストを返すメソッドが必要です。各リストには、交差するすべてのオブジェクトが含まれています。
私はすでに2つのオブジェクトが交差するかどうかを返します方法があります:二つのリストタッチ内の任意の二つの曲線があれば
bool _CurveLoopsIntersect(List<CurveLoop> curveLoopsA, List<CurveLoop> curveLoopsB) {...}
はtrueを返しますが。
以下は私がこれまでに持っていたコードですが、それは私に1回のパスを与えます。私はオブジェクトAとBが交差し、BとCが交差すると、set {A、B、C}を形成するように、複数のパスが必要だと思います。しかし、任意の数のパスが必要で、時にはオブジェクトが全く交差しないか、{A、B、C}や{D、E}や{F}などの異なるセットの一部になることがあります。これは、このpsuedu
set = a,b,c, ...
While(set not empty) {
Create newSet
Add set.first to new list
Remove set.first from set // this line isnt necessary if a curve doesnt intersect with self
For (i = 0 , i < newset.length , i++)
{
newSet.add(set.FindAll(x => _CurveLoopsIntersect(x, newSet[i]));
set.removeRange(newSet); // this line may have error that the first element doesnt exist in set
}
Add newSet to set of sets
}