Question

Supposons que nous avons un ensemble de points avec la restriction que pour chaque point toutes les coordonnées sont non négatifs, et la somme des coordonnées est égal à 1. Ceci limite les points à se trouver dans un simplex trois dimensions de sorte qu'il est logique de essayez de mapper de nouveau dans l'espace 3 dimensions pour la visualisation.

La carte Je cherche prendrait des points extrêmes (1,0,0,0), (0,1,0,0), (0,0,1,0) et (0,0,0 , 1) aux sommets de « bien placé » tétraèdre régulier. En particulier, le centre du tétraèdre sera à l'origine, un sommet ne se trouvent sur l'axe des z, une face parallèle à au plan x, y, et un bord soit parallèle à l'axe x.

Code est ici qui fait la même chose pour les points en 3 dimensions, mais il ne semble pas évident de l'étendre à 4. Au fond, je suis à la recherche d'équivalents de fonctions 4-d tosimplex (qui prend 4 dimensions en 3) et il est inverse 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

Réponse:

simple reformulation de la réponse de deinst en termes de matrices suivant donne. (1 / sqrt [4] est comme 4ème coordonnée parce qu'il est la distance au centre simplex)

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
Était-ce utile?

La solution

Vous voulez

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

Et il est une transformation linéaire de sorte que vous transformez

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

Modifier Vous voulez que le centre à l'origine - juste soustrayez la moyenne des quatre points. Désolé

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

Autres conseils

Une possibilité:

  1. Générer quatre (non orthoganal) 3-vecteurs, \vec{v}_i du centre du tétraèdre vers chaque sommet.
  2. pour chaque forme x = (x_1 .. x_4) quatre positions de la somme vectorielle \Sum_i x_i*\vec{v}_i.

Bien sûr, ce mappage n'est pas unique en général, mais vous condition que la somme du x_i à 1 Contraint les choses.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top