как проверить, является ли сплошная прямоугольная коробка подмножеством сплошного шара - PullRequest
0 голосов
/ 19 сентября 2011

Предположим, нам даны координаты центра сплошного прямоугольника, его длины, ширины, высоты и сплошного шара с заданным центром и радиусом.

Есть ли быстрый способ проверить, является ли поле подмножеством шара? Единственный простой метод, который приходит мне в голову, - это проверить, находится ли каждая из 8 угловых вершин внутри сферы. Если да, коробка действительно является подмножеством шара (по свойству выпуклости шара).

Ответы [ 2 ]

0 голосов
/ 19 сентября 2011

Если вы ожидаете, что большую часть времени коробка не будет находиться внутри сферы, вы можете сделать несколько быстрых тестов:

if (sphere.center.x+sphere.radius<box.center.x-box.size.x) return false;
if (sphere.center.x-sphere.radius>box.center.x+box.size.x) return false;
etc.

Если вы ожидаете, что коробка обычно находится далеко внутри сферы, вы можете сделать другие быстрые тесты:

bsx = box.size.x;
bsy = box.size.y;
bsz = box.size.z;
box_radius = sqrt(bsx*bsx+bsy*bsy+bsz*bsz)/2;
brx = box.center.x-sphere.center.x;
bry = box.center.y-sphere.center.y;
brz = box.center.z-sphere.center.z;
box_dist = sqrt(brx*brx+bry*bry+brz*brz);
if (box_radius+box_dist<sphere.radius) return true;

Вам все равно понадобятся более точные тесты, если быстрые тесты не пройдут.

0 голосов
/ 19 сентября 2011

Есть только 4 угла для проверки, но на самом деле вам нужно только проверить 2, которые по диагонали друг к другу. Это следует из свойства прямоугольника, имеющего прямые стороны, в то время как круг является выпуклым, как вы заявляете.

В качестве альтернативы, учтите, что если левый верхний угол и правый нижний угол находятся внутри круга, то прямоугольник, который они образуют, представляет собой ползучее поле . Круг, очевидно, не является, и, следовательно, прямоугольник должен быть субрегионом круга.

РЕДАКТИРОВАТЬ: Возможно, вы говорите о поле и сфере, и в этом случае применяется та же идея, вам просто нужно выбрать точки, которые имеют разные значения x, y и z

...