代码之家  ›  专栏  ›  技术社区  ›  Nick

在python中,点与4d球体接近的可视化

  •  1
  • Nick  · 技术社区  · 6 年前

    我正在寻找一种方法来可视化点与四维球体的接近程度。对于一个圆,我可以简单地使用散点图,观察单位圆附近点的分布,如下所示。对于一个三维球体,我可以做类似的事情。然而,我如何去可视化这个4维球体呢?

    有没有一种方法可以减少尺寸,把整个空间投影成三维?很明显,我可以取点的范数,看看它和1有多接近,但我想有某种视觉辅助。

    unit circle validation

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rory Daulton    6 年前

    这里有一种方法可以将4维坐标转换为3维约束坐标,使您可以可视化点与4D球体之间的距离。既然你没有显示你自己的代码或方程,我就给你一个概述。如果你对自己的工作提供更多的细节,那么你可以问我更多的细节。

    假设取一个四维的点 (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弧度)。这会使点“旋转”到远离 w 在规则的球面坐标系中向下移动到三维空间的轴。与原点和以原点为中心的任何四个球体之间的距离没有改变。现在 convert to 3D Cartesian coordinates 具有

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

    现在像往常一样绘制这些图表。由于到原点和四个球体的距离没有改变,这应该是一个有用的可视化。

    看看这些方程,我们发现 x , y z 都被 sin(t1) . 这意味着你可以通过只找到 罪(T1) 用公式

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

    没必要找 R , t2 t3 甚至 T1 本身。你得小心特殊情况 sin(t1) == 0.0 只有当 x == y == z == 0 . 然后我会画出4D点的地图 (0, 0, 0, w) 到三维点 (w, 0, 0) 而且可视化仍然可以很好地工作。

    您可以使用其他类似的转换,这些转换可能更有用,例如更改角度 T3 归零而不是改变 T1 . 这稍微减少了计算,但你需要排列坐标,我相信可视化只使用了三个球体的一半。

    当然,绘制3D指向计算机绘图表面的图形的一种方法是现在设置 T2 达到90度

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

    你会得到一个很像你在问题中展示的图表。

    (注:在进一步考虑最佳可视化的基础上,我修改了上述公式。)