У меня есть задача провести грубую проверку, пересекаются ли кубоиды, предполагая, что они являются сферами.
Итак, у меня есть класс кубоидов с тремя массивами, которые хранятся как координаты x, y, z каждой из 8 точек:
Cuboid::Cuboid()
: _x_coords(std::array<float, 8>())
, _y_coords(std::array<float, 8>())
, _z_coords(std::array<float, 8>())
Я написал две функции, чтобы получить геометрический центр кубоида и получить радиус сферы (минимально возможную сферу вокруг кубоида):
std::tuple<float, float, float> Cuboid::getGeometricalCenter() const {
float cx = (_x_coords[1] - _x_coords[0]) / 2 ;
float cy = (_y_coords[1] - _y_coords[3]) / 2 ;
float cz = (_z_coords[4] - _z_coords[0]) / 2;
return std::make_tuple(cx, cy, cz);
float Cuboid::getSphereRadius() const {
float cx = _x_coords[1] - _x_coords[0];
float cy = _y_coords[1] - _y_coords[3];
float cz = _z_coords[4] - _z_coords[0];
float radius = sqrt(cx * cx + cy * cy + cz * cz);
return radius;
Теперь я пытаюсь сравнить, если расстояние между геометрическими центрами больше, чем сумма радиусов сферы, но я знаю, что не могу просто вывести кортеж из кортежа:
if (getGeometricalCenter() - other.getGeometricalCenter() > (getSphereRadius()+other.getSphereRadius()))
return false;
Я очень ценю, если кто-то может помочь мне с что если заявление для кортежей. Также, если у кого-то есть дополнительные комментарии, если я что-то сделал не так, пожалуйста, поправьте меня, большое спасибо