Как найти две минимальные точки в QVector?
Пытаюсь найти две минимальные точки в QVector. По умолчанию в векторе хранится не меньше трёх точек, тобишь треугольник, но может быть и больше точек. Вопрос, как правильно и оптимально найти 2 минимальные точки в векторе. P.s. QPointF содержит координату x() и y(). Это мой код, но чёт как-то он не работает.
QPointF firstPoint = points[0];
QPointF secondPoint = points[0];
for (int i = 0; i < points.size(); ++i) {
const QPointF point = points.at(i);
if (point.x() < firstPoint.x() && point.y() < firstPoint.y()) {
firstPoint = point;
} else if (point.x() < secondPoint.x() && point.y() < secondPoint.y()) {
secondPoint = point;
}
}
Ответы (1 шт):
Минимальной точка может быть только по одной из выбранных координат, либо по X, либо по Y, но не одновременно вместе (например какая из двух точек (1, 0) и (0, 1) будет минимальной по обоим координатам).
Либо, например, можно считать минимальной точку с наименьшим Евклидовым расстоянием от начала координат.
Также, как понимаю две минимальные точки означают что одна из них минимальна, т.е. имеет наименьшую метрику, а другая вторая по величине метрики, т.е. в отсортированном по метрике списке это будут две первые точки.
Ссылка на смежный пост с аналогичным вопросом и алгоритмом.
Привожу следующий код который для примера находит две точки минимальные по метрике расстояния по X:
QPointF min0, min1;
if (points.at(0).x() < points.at(1).x()) {
min0 = points.at(0); min1 = points.at(1);
} else {
min0 = points.at(1); min1 = points.at(0);
}
for (int i = 2; i < points.size(); ++i) {
QPointF const & point = points.at(i);
if (point.x() < min0.x()) {
min1 = min0;
min0 = point;
} else if (point.x() < min1.x()) {
min1 = point;
}
}