私は、点と線、および視覚的に魅力的なものにするために必要なすべてを描画できる、実用的な凸包プログラムを作成しました。私の質問は、for ループが 1 つだけ必要になるように設計する方法はありますか? 上下の船体を作る代わりに?上部の船体が最後に到達する/低くなり始めると、どうすれば追跡できるのかわかりません。
void computeConvexHull(QPainter * painter)
{
int k = 0;
std::vector<QPointF> vecLinePoints(2*vecPoints.size());
// Sort points lexicographically
std::sort(vecPoints.begin(),vecPoints.end(), xyCompare());
//begin with far left, work our way to lower hull
// Build upper hull
for (int i = vecPoints.size()-2, j = k+1; i >= 0; i--)
{
while (k >= j && checkPoints(vecLinePoints[k-2], vecLinePoints[k-1], vecPoints[i]) <= 0)
k--;
vecLinePoints[k++] = vecPoints[i];
}
// Build lower hull
for (int i = 0; i < vecPoints.size(); ++i)
{
while (k >= 2 && checkPoints(vecLinePoints[k-2], vecLinePoints[k-1], vecPoints[i]) <= 0)
k--;
vecLinePoints[k++] = vecPoints[i];
}
//reduce size of vector
vecLinePoints.resize(k);