Предполагая, что происхождение вашей сферы (0,0,0), я думаю, что у вас есть дополнительный квадратный корень.
Кроме того, умножение X * X в несколько раз быстрее, чем Math.pow(X,2)
…
Я бы также переместил вычисление радиуса за пределы цикла и сделал бы его double
, как и все остальные, на случай, если ошибки округления могут вас укусить.
(Вы можете заменить приращения X++
на X += foo
, чтобы эта версия также работала с меньшими или большими шагами.)
double radius = diameter / 2;
for(double X = -radius; X < radius; X++ )
for(double Y = -radius; Y < radius; Y++ )
for(double Z = -radius; Z < radius; Z++ )
if(Math.sqrt((X * X) + (Y * Y) + (Z * Z)) <= radius)
SetInShere(X,Y,Z);