Domanda

Supponiamo di avere un insieme di punti con la limitazione che per ciascun punto tutte le coordinate sono non-negativi, e la somma delle coordinate è uguale a 1. Ciò limita punti siano in simplex 3 dimensioni così ha senso cercare di mappare nuovamente in 3 dimensioni dello spazio per la visualizzazione.

La mappa che sto cercando avrebbe preso punti estremi (1,0,0,0), (0,1,0,0), (0,0,1,0) e (0,0,0 , 1) a vertici di "ben posizionato" tetraedro regolare. In particolare, il centro del tetraedro sarà all'origine, un vertice si trovano sull'asse z, una faccia parallela al piano x, y, e un bordo di essere parallela all'asse x.

Ecco il codice che fa cosa simile per i punti in 3 dimensioni, ma non sembra ovvio come estenderlo a 4. Fondamentalmente sto cercando 4-d equivalenti di funzioni tosimplex (che prende 4 dimensioni in 3) ed è inversamente 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

Risposta:

riformulazione diretta della risposta di deinst in termini di matrici dà seguito. (1 / sqrt [4] viene in su come coordinare 4 ° perché è la distanza dal centro 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
È stato utile?

Soluzione

Si desidera

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

Ed è una trasformazione lineare in modo da trasformare

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

Modifica Si desidera che il centro nell'origine - basta sottrarre la media dei quattro punti. Siamo spiacenti

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

Altri suggerimenti

Una possibilità:

  1. Genera quattro (non ortogonale) 3-vettori, \vec{v}_i dal centro del tetraedro verso ogni vertice.
  2. Per ciascuna delle quattro posizioni x = (x_1 .. x_4) formano il \Sum_i x_i*\vec{v}_i somma vettoriale.

Naturalmente questo mappatura non è unico, in generale, ma a condizione che somma del x_i a 1 di restrizioni connesse cose.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top