Pregunta

Supongamos que tenemos un conjunto de puntos con la restricción de que para cada punto de todas las coordenadas no son negativos, y la suma de las coordenadas es igual a 1. Esto restringe puntos a mentira en un simplex 3-dimensional así que tiene sentido a tratar de asignar de nuevo en 3 dimensiones del espacio para la visualización.

El mapa Busco tomaría puntos extremos (1,0,0,0), (0,1,0,0), (0,0,1,0) y (0,0,0 , 1) a los vértices de "bien posicionado" tetraedro regular. En particular, el centro del tetraedro será en el origen, un vértice sería encuentran en el eje z, una cara a paralela al plano x, y, y un borde para ser paralelo al eje x.

Aquí está el código que hace algo similar para los puntos en 3 dimensiones, pero no parece obvio cómo extender a 4. Básicamente estoy buscando 4-d equivalentes de funciones tosimplex (que tiene 4 dimensiones en 3) y es inversa 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

Respuesta:

reformulación directa de la respuesta de deinst en términos de matrices da siguiente. (1 / sqrt [4] surge como coordenadas cuarto porque es la distancia al 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
¿Fue útil?

Solución

¿Quieres

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

Y es una transformación lineal para transformar

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

Editar Usted quiere que el centro en el origen - sólo resta el promedio de los cuatro puntos. Lo sentimos

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

Otros consejos

Una posibilidad:

  1. Generar cuatro (no-ortogonal) 3-vectores, \vec{v}_i desde el centro del tetraedro hacia cada vértice.
  2. Para cada x = (x_1 .. x_4) de cuatro posiciones forman el \Sum_i x_i*\vec{v}_i suma vectorial.

Por supuesto, esta asignación no es única en general, pero la condición de que la suma de la x_i a 1 Restringe cosas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top