как вычесть кортежи // проверка кубоидного пересечения - PullRequest
0 голосов
/ 28 февраля 2020

У меня есть задача провести грубую проверку, пересекаются ли кубоиды, предполагая, что они являются сферами.

Итак, у меня есть класс кубоидов с тремя массивами, которые хранятся как координаты 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;

Я очень ценю, если кто-то может помочь мне с что если заявление для кортежей. Также, если у кого-то есть дополнительные комментарии, если я что-то сделал не так, пожалуйста, поправьте меня, большое спасибо

...