私は、頂点が0..n-1の(凸状の)ポリゴンを持っているとしましょう。私はこのポリゴンを、例えば頂点iとjの間で半分に分割したいと思っています。頂点iと頂点jは両方のポリゴンに現れます。STLベクトルを分割する
私が知る限り、2つのケースしかありません。 1つはi < j、またはi> jのときです。私はjと決して等しくない(それらは今までには隣接していない)。
私はvector<Point> poly
のような頂点を保存しています。 Point
は、2つの倍数x
とy
を持つ単なる基本的な構造体であり、ポイントはCCW順にインデックスされていると仮定できます。
の場合、iからj(両端を含む)の頂点を1つのベクトルにコピーし、次にjからn-1を加えて0からiを別のベクトルにコピーするだけです。あるいは、その逆の場合は、そうですか?
ここで(J == closestIndexを聞かせて)私が使用しているが、権利を動作するようには思えないコードです:
if (i < closestIndex) {
lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.begin() + closestIndex + 1);
upperPoly.insert(upperPoly.end(), poly.begin() + closestIndex, poly.end());
upperPoly.insert(upperPoly.end(), poly.begin(), poly.begin() + i + 1);
} else {
lowerPoly.insert(lowerPoly.end(), poly.begin() + i, poly.end());
lowerPoly.insert(lowerPoly.end(), poly.begin(), poly.begin() + closestIndex + 1);
upperPoly.insert(upperPoly.end(), poly.begin() + closestIndex, poly.begin() + i + 1);
}
うわー。私は今日、本当に馬鹿だと感じる。それも考えなかった。ありがとう!! – mpen