在Python中可视化点到4D球面的接近度

时间:2018-07-20 15:19:16

标签: python math geometry

我正在寻找一种可视化点到4维球体的接近度的方法。对于一个圆,我可以简单地使用散点图,观察单位圆附近的点分布,如下所示。对于3D球面,我可以做类似的事情。但是,如何将其可视化为4维球体?

有没有一种方法可以减小将整个空间投影到3D中的尺寸?显然,我可以按照这些点的范数来观察它与1的接近程度,但是我希望获得某种视觉辅助。

unit circle validation

1 个答案:

答案 0 :(得分:1)

这是将4维坐标转换为3维坐标的一种方法,可以直观地显示点与4D球体之间的距离。由于您没有显示自己的代码或方程式,因此仅概述一下。如果您要提供自己工作的更多细节,则可以要求我提供更多细节。

以4维为中心,假设(x, y, z, w)。然后将那些笛卡尔坐标转换为4D球坐标  (r, t1, t2, t3),其中r是点到原点的距离,t1, t2, t3是参考角。转换公式位于Wikipedia's entry for n-sphere中,尽管在我偏爱的转换中,我会颠倒笛卡尔坐标的顺序。换句话说,我们得到了关系

w = r * cos(t1)
z = r * sin(t1) * cos(t2)
y = r * sin(t1) * sin(t2) * cos(t3)
x = r * sin(t1) * sin(t2) * sin(t3)

我们现在通过将角度t1更改为90°(或pi / 2弧度),将该点映射到3D空间中的点。这具有将点从w轴向下“旋转”到常规球坐标中的3D空间的效果。距原点和以原点为中心的任何4个球面的距离均未更改。现在convert to 3D Cartesian coordinates

z = r * cos(t2)
y = r * sin(t2) * cos(t3)
x = r * sin(t2) * sin(t3)

现在像往常一样画那些。由于到原点和4球的距离没有改变,因此这应该是有用的可视化。

看看这些方程式,我们发现xyz的值都除以sin(t1)。这意味着您可以通过仅使用公式查找sin(t1)来优化计算

sin(t1) = sqrt((x*x + y*y + z*z) / (x*x + y*y + z*z + w*w))

无需查找rt2t3甚至t1本身。您需要注意特殊情况sin(t1) == 0.0,只有在x == y == z == 0时才会发生。然后,我将4D点(0, 0, 0, w)映射到3D点(w, 0, 0),并且可视化效果仍然很好。

还有其他类似的转换可能会更有用,例如将角度t3更改为零而不是更改t1。我相信,这会稍微减少计算量,但是您需要置换坐标,并且可视化仅使用3个球体的一半。

当然,绘制3D指向计算机图形表面的图形的一种方法是现在将t2设置为90°以获得

y = r * cos(t3)
x = r * sin(t3)

您将获得非常类似于问题中显示的图形的图形。

(注意:基于对最佳可视化的进一步考虑,我更改了上面的公式。)