Вопрос, необходимый для вычисления AABB минимального размера для набора входных геометрий.
Типы геометрий перечислены ниже:
- Прямоугольник, center_x, center_y, ширина, высота: R xywh
- Круг, центр_x, центр_y, радиус: C xyr
- Набор точек, количество точек, x_1, y_1, ..., x_n, y_n: P n x_1y_1 ... x_n y_n
- # : указывает конец ввода
Пример выборки показан ниже:
input:
R 0 0 3 2
#
выход:
0 0 3 2
вход:
P 23 -2 -1 4
C -0,5 3,2 1,6
P 3 -1,5 3 3 3 5 3
R 0 0 3 2
#
вывод:
1.45 1.4 7.1 6.8
Мне интересно, как работает пример два, так как есть многоканальный ввод, как я могу построить свойААББ?Однако как избежать ситуации, когда переменная заменяется?
Например,
R 0 0 3 2
R 1 2 4 5
Я просто не знаю, как избежать заменыcenter_x, center_y, w и h.
ниже мой код,
#include <iostream>
#include <cstdlib>
using namespace std;
int main()
{
int times, i;
char geo;
double center_x, center_y, w, h, r;
double box_LX = 0, box_RX = 0, box_DY = 0, box_UY = 0;
bool end;
end = false;
double LX, RX, UY, DY;
while (!end) {
cin >> geo;
if (geo == 'R') {
cin >> center_x >> center_y >> w >> h;
LX = (center_x - w / 2);
RX = (center_x + w / 2);
DY = (center_y - h / 2);
UY = (center_y + h / 2);
if (RX > box_RX)
box_RX = RX;
if (LX < box_LX)
box_LX = LX;
if (UY > box_UY)
box_UY = UY;
if (DY < box_DY)
box_DY = DY;
}
if (geo == 'C') {
cin >> center_x >> center_y >> r;
if (box_RX < (center_x + r))
box_RX = center_x + r;
if (box_LX > (center_x - r))
box_LX = center_x - r;
if (box_UY < (center_y + r))
box_UY = center_y + r;
if (box_DY < (center_y - r))
box_DY = center_y - r;
}
if (geo == 'P') {
cin >> times;
i = 0;
while (i != times) {
cin >> center_x >> center_y;
if (box_RX < center_x)
box_RX = center_x;
if (box_LX > center_x)
box_LX = center_x;
if (box_UY < center_y)
box_UY = center_y;
if (box_DY > center_y)
box_DY = center_y;
i++;
}
}
if (geo == '#') {
cout << (box_LX+box_RX)/2 << " " << (box_DY+box_UY)/2 << " " << abs(box_LX - box_RX) << " " << abs(box_UY - box_DY) << endl;
end = true;
}
}
return 0;
}
Спасибо большое !!