Frage

Nehmen wir eine Reihe von Punkten mit der Einschränkung haben, daß für jeden Punkt all Koordinaten nicht negativ ist, und die Summe der Koordinaten ist gleich 1. Dies beschränken Punkte liegen in einem 3-dimensionalen Simplex so ist es sinnvoll versuchen, es für die Visualisierung wieder in 3-dimensionalen Raum abzubilden.

Die Karte ich suche würde Extrempunkte nehmen (1,0,0,0), (0,1,0,0), (0,0,1,0) und (0,0,0 , 1) an Ecken von „gut positioniert“ regulären Tetraeders. Insbesondere Mitte des Tetraeders im Ursprung sein, ein Scheitelpunkt auf der Z-Achse liegen würde, eine Fläche zu x, y-Ebene parallel zu und eine Kante parallel zur x-Achse zu sein.

Hier ist Code, der in 3 Dimensionen für Punkte ähnliche Sache tut, aber es scheint nicht klar, wie es zu verlängern bis 4. Grundsätzlich ich suche 4-d Äquivalente Funktionen tosimplex (die 4 Dimensionen in 3 nimmt) und es ist inverser 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

Antwort:

einfache Neuformulierung der Antwort des deinst in Bezug auf Matrizen ergibt folgende. (1 / sqrt [4] kommt als vierte Koordinate, da sie die Entfernung zu simplex Zentrum ist)

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
War es hilfreich?

Lösung

Sie möchten

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

Und es ist eine lineare Transformation, so dass Sie verwandeln

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

Bearbeiten Sie möchten das Zentrum am Ursprung - subtrahieren nur den Durchschnitt der vier Punkte. Es tut uns Leid

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

Andere Tipps

Eine Möglichkeit:

  1. Generieren von vier (nicht-orthoganal) 3-Vektoren, \vec{v}_i von der Mitte des Tetraeders zu jedem Scheitelpunkt.
  2. Für jede vier Position x = (x_1 .. x_4) die Vektorsumme \Sum_i x_i*\vec{v}_i bilden.

Natürlich ist diese Zuordnung ist in der Regel nicht eindeutig, aber Sie Bedingung, dass die Summe der x_i bis 1 Constraints Dinge.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top