我试图根据一篇文章制作四维球体,其结果如下:
我可以正确地生成一个立方体:
但是,当我根据这个公式转换所有的点(从上面链接的页面):
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。