在Mathematica中将4D空间的点投影到3D空间

5
假设我们有一组点,其限制为每个点的所有坐标都是非负的,并且坐标之和等于1。这将限制点位于三维单纯形中,因此可以尝试将其映射回三维空间进行可视化。
我正在寻找的映射将极端点(1,0,0,0),(0,1,0,0),(0,0,1,0)和(0,0,0,1)映射到“位置良好”的正四面体的顶点。特别地,正四面体的中心将位于原点,一个顶点将位于z轴上,一个面将平行于x,y平面,一个边将平行于x轴。
下面是针对三维点执行类似操作的代码,但不明显如何将其扩展到4维。基本上,我正在寻找函数tosimplex的4-d等效项(它将4个维度转换为3个维度),以及它的反函数fromsimplex。
A = Sqrt[2/3] {Cos[#], Sin[#], Sqrt[1/2]} & /@ 
    Table[Pi/2 + 2 Pi/3 + 2 k Pi/3, {k, 0, 2}] // Transpose;
B = Inverse[A];
tosimplex[{x_, y_, z_}] := Most[A.{x, y, z}];
fromsimplex[{u_, v_}] := B.{u, v, Sqrt[1/3]};
(* checks *) extreme = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}}; Graphics[Polygon[tosimplex /@ extreme]] fromsimplex[tosimplex[#]] == # & /@ extreme
答案: deinst的答案简单地以矩阵的形式重新表述如下。(1 / sqrt [4]出现为第四个坐标,因为它是到单纯形中心的距离)
A = 转置[{{-(1/2), -(1/(2 Sqrt[3])), -(1/(2 Sqrt[6])), 
     1/Sqrt[4]}, {1/2, -(1/(2 Sqrt[3])), -(1/(2 Sqrt[6])), 
     1/Sqrt[4]}, {0, -(1/(2 Sqrt[3])) + Sqrt[3]/2, -(1/(2 Sqrt[6])), 
     1/Sqrt[4]}, {0, 0, Sqrt[2/3] - 1/(2 Sqrt[6]), 1/Sqrt[4]}}];
B = 逆[A];
tosimplex[{x_, y_, z_, w_}] := 最初[A.{x, y, z, w}];
fromsimplex[{t_, u_, v_}] := B.{t, u, v, 1/Sqrt[4]};
(* 检查 *) extreme = 表[{阵列[Boole[# == i] &, 4]}, {i, 1, 4}]; Graphics3D[Sphere[tosimplex[#], .1] & /@ extreme] fromsimplex[tosimplex[#]] == # & /@ extreme
注:此代码为Mathematica语言,主要是进行一些矩阵运算和坐标变换的操作。
2个回答

8

You want

   (1,0,0,0) -> (0,0,0)
   (0,1,0,0) -> (1,0,0)
   (0,0,1,0) -> (1/2,sqrt(3)/2,0)
   (0,0,0,1) -> (1/2,sqrt(3)/6,sqrt(6)/3))

这是一个线性变换,因此您可以进行转换

   (x,y,z,w) - > (y + 1/2 * (z + w), sqrt(3) * (z / 2 + w / 6), sqrt(6) * w / 3)

编辑 您希望将中心放在原点 - 只需减去四个点的平均值。抱歉。

(1/2, sqrt(3)/6, sqrt(6) / 12)

1
练习。有半页涂鸦的三角形等图形。唯一棘手的部分是四面体的高度,一旦你得到了底面的中心,就只是代数问题。 - deinst

1

一种可能的方法:

  1. 从四面体中心向每个顶点生成四个(非正交)三维向量 \vec{v}_i
  2. 对于每个四元组位置 x = (x_1 .. x_4),形成向量和 \Sum_i x_i*\vec{v}_i

当然,一般情况下这种映射并不唯一,但是你对 x_i 的总和为1的限制会约束事物。


敢猜一下如何从四面体中心获取指向每个顶点的4个向量的坐标吗?;) - Yaroslav Bulatov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接