你如何将一个立方体变成一个球体?

我试图根据一篇文章制作四维球体,其结果如下:

正确

我可以正确地生成一个立方体:

之前

但是,当我根据这个公式转换所有的点(从上面链接的页面):

式

x = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0)); y = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0)); z = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0)); 

我的领域看起来像这样:

后

正如你所看到的,立方体的边缘仍然偏离太远。 立方体的范围从-1+1在所有轴上,就像文章所说的那样。

任何想法有什么不对?

你错写了这个公式。

 x = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0)); y = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0)); z = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0)); 

您修改原始的x并覆盖它。 然后你修改y不是基于原来的x而是修改后的x 。 然后你根据这两个修改版本来修改z

保留原件,并计算这个:

 float dx = x * sqrtf(1.0 - (y*y/2.0) - (z*z/2.0) + (y*y*z*z/3.0)); float dy = y * sqrtf(1.0 - (z*z/2.0) - (x*x/2.0) + (z*z*x*x/3.0)); float dz = z * sqrtf(1.0 - (x*x/2.0) - (y*y/2.0) + (x*x*y*y/3.0)); 

使用dx,dy和dz。