Я хотел просто оставить комментарий, чтобы задать вопрос, но мне только кажется, что я могу оставить ответ, это всего лишь наблюдение:
Этот код действительно делает то, что вы хотите?
int result = INSIDE;
float distance;
2.40% for(int i=0; i < 6; i++) {
7.94% distance = pl[i].distance(p);
12.21% if (distance < -radius)
0.67% return OUTSIDE;
3.67% else if (distance < radius)
result = INTERSECT;
как эта функция читает для меня, предположим, что сфера находится внутри, для каждой точки на вашей области i, возьмите расстояние между i и центром сферы p, если это расстояние меньше отрицательного радиуса ... моя парадигма разрушена.
То есть это возвращается рано, если у вас отрицательное расстояние меньше вашего отрицательного радиуса? Это действительно то, что вы хотите прямо здесь?