total+=delta;
if(in_esfera(x,y,z,r_esfera))
esfera+=delta;
total
and esfera
are three-dimensional volumes whereas delta
is a one-dimensional length. If you were tracking units you'd have m3 on the left and m on the right. The units are incompatible.
要修复它,立方体delta
这样你在概念上就积累了微小的立方体而不是微小的线条。
total+=delta*delta*delta;
if(in_esfera(x,y,z,r_esfera))
esfera+=delta*delta*delta;
这样做可以修复输出,并且也适用于任何值delta
:
v_sphere = 33.37400000; v_cube = 64.00000000
3.12881250
请注意,该算法“适用于”任意delta
值,但存在严重的准确性问题。它非常容易出现舍入问题。当delta
是二的幂:1/64.0
比1/100.0
, 例如:
v_sphere = 33.50365448; v_cube = 64.00000000
3.14096761
另外,如果您希望程序运行得更快,请摆脱所有这些打印输出!或者至少是内循环中的那些......