2010-08-17 110 views
4

假设我们有一组点,其限制条件是每个点的所有坐标都是非负的,并且坐标的总和等于1。位于三维单形中,因此试图将其映射回三维空间以进行可视化是有意义的。在Mathematica中将4d空间中的点投影到3d空间中

我正在寻找的地图将取极端点(1,0,0,0),(0,1,0,0),(0,0,1,0)和(0,0, 0,1)到“精确定位”正四面体的顶点。特别是,四面体的中心将位于原点,一个顶点位于z轴上,一个面平行于x,y平面,一个边平行于x轴。

这里的代码在三维中为点做类似的事情,但它似乎并不明显如何将其扩展到4.基本上我在寻找4d等价的函数tosimplex(它将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 = Transpose[{{-(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 = Inverse[A]; 
tosimplex[{x_, y_, z_, w_}] := Most[A.{x, y, z, w}]; 
fromsimplex[{t_, u_, v_}] := B.{t, u, v, 1/Sqrt[4]}; 

(* Checks *) 
extreme = Table[Array[Boole[# == i] &, 4], {i, 1, 4}]; 
Graphics3D[Sphere[tosimplex[#], .1] & /@ extreme] 
fromsimplex[tosimplex[#]] == # & /@ extreme 

回答

7

你想

(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) 
+0

不错......介意说你怎么这么快? – 2010-08-17 21:48:01

+1

练习。有三分之一的潦草的三角形等图纸。唯一棘手的部分是四面体的高度,一旦你得到基地的中心,它就是代数。 – deinst 2010-08-17 22:12:59

1

一种可能性:

  1. 生成四个(非orthoganal)3的载体,\vec{v}_i从四面体的中心朝向每个顶点。
  2. 对于每四位x = (x_1 .. x_4)构成矢量和\Sum_i x_i*\vec{v}_i

当然这个映射不是一般的唯一,但你条件是x_i的总和为1约束的东西。

+0

小心冒险猜猜如何获得4个向量从四面体的中心到每个顶点的坐标? ;) – 2010-08-18 03:55:58