Я строю пространственное октри. Чтобы определить, в какую ветвь / октант следует поместить определенную точку (x, y, z), я использую эту функцию:
if (x>x_centre) {
xsign = 1;
}
else {
xsign = 0;
}
if (y>y_centre) {
ysign = 1;
}
else {
ysign = 0;
}
if (z>z_centre) {
zsign = 1;
}
else {
zsign = 0;
}
return xsign + 2*ysign + 4*zsign;
Возвращает число от 0 до 7, уникальное для каждого октанта. Оказывается, этот фрагмент называется много раз. Это занимает довольно много времени при строительстве больших деревьев.
Есть ли простой способ ускорить этот процесс?
Это уже дает 30-процентное ускорение:
xsign = x>x_centre;
ysign = y>y_centre;
zsign = z>y_centre;
return xsign + 2*ysign + 4*zsign;
Любые другие советы?
Задача ещё не решена.