Liste de toutes les sections intéressantes d'un tétraèdre

Réponse de mise à jour, 12/22: À l'aide de Peter Shor observation qu'il y a un homomorphisme entre les sections distinctes et les permutations d'objets sur le cube, énumérez toutes ces permutations en représentant un groupe de symétries du cube comme un sous-groupe de Symétricgroup[8] et en utilisant GroupElements / Permute, trouvez des attributions centroïdes en utilisant le solveur SAT de Mathematica, sélectionnez des ensembles de points avec des valeurs distinctes au singulier, peu plus de détails et le code complet donné ici

Question

une section 2D intéressante est un plan qui passe par le centre d'une 3D régulière simplex et 2 autres points dont chacun est un centroïde d'un sous-ensemble non vide de Sommets. Il est défini par deux sous-ensembles de Sommets. Par exemple {{1},{1,2}} donne un plan défini par 3 points -- centre du tétraèdre, premier sommet, et la moyenne des premier et deuxième sommets.

Un ensemble intéressant de sections est un ensemble dans lequel deux sections ne définissent pas le même plan sous vertex relabeling. Par exemple, définissez {{{1},{2}},{{3},{4}}} n'est pas intéressant. Est-il une approche efficace pour trouver un ensemble intéressant de intéressant de sections? J'ai besoin de quelque chose qui pourrait généraliser à un problème analogue pour les sections 3D de 7d simplex, et finir la nuit.

Ma tentative d'approche est ci-dessous. Un problème est que si vous ignorez la géométrie, certaines sections équivalentes vont être retenues, donc J'ai 10 sections au lieu de 3. Un plus gros problème est que j'ai utilisé la force brute et il n'est certainement pas échelle et (nécessite 10^17 comparaisons pour 7D simplex)

http://yaroslavvb.com/upload/simplex-sections.png

Voici le Mathematica le code pour générer l'image ci-dessus.

entropy[vec_] := Total[Table[p Log[p], {p, vec}]];
hadamard = KroneckerProduct @@ Table[{{1, 1}, {1, -1}}, {2}];
(* rows of hadamard matrix give simplex vertex coordinates *)

vertices = hadamard;
invHad = Inverse[hadamard];
m = {m1, m2, m3, m4};
vs = Range[4];

(* take a set of vertex averages, generate all combinations arising 
from labeling of vertices *)
vertexPermutations[set_] := (
   newSets = set /. Thread[vs -> #] & /@ Permutations[vs];
   Map[Sort, newSets, {2}]
   );
(* anchors used to define a section plane *)

sectionAnchors = Subsets[{1, 2, 3, 4}, {1, 3}];
(* all sets of anchor combinations with centroid anchor always 
included *)
anchorSets = Subsets[sectionAnchors, {2}];
anchorSets = Prepend[#, {1, 2, 3, 4}] & /@ anchorSets;
anchorSets = Map[Sort, anchorSets, {2}];
setEquivalent[set1_, set2_] := MemberQ[vertexPermutations[set1], set2];
equivalenceMatrix = 
  Table[Boole[setEquivalent[set1, set2]], {set1, anchorSets}, {set2, 
    anchorSets}];
Needs["GraphUtilities`"];
(* Representatives of "vertex-relabeling" equivalence classes of 
ancher sets *)
reps = First /@ StrongComponents[equivalenceMatrix];

average[verts_] := Total[vertices[[#]] & /@ verts]/Length[verts];
makeSection2D[vars_, {p0_, p1_, p2_}] := Module[{},
   v1 = p1 - p0 // Normalize;
   v2 = p2 - p0;
   v2 = v2 - (v1.v2) v1 // Normalize;
   Thread[vars -> (p0 + v1 x + v2 y)]
   ];

plotSection2D[f_, pointset_] := (
   simplex = 
    Graphics3D[{Yellow, Opacity[.2], 
      GraphicsComplex[Transpose@Rest@hadamard, 
       Polygon[Subsets[{1, 2, 3, 4}, {3}]]]}];
   anchors = average /@ pointset;
   section = makeSection2D[m, anchors];
   rf = Function @@ ({{x, y, z, u, v}, 
       And @@ Thread[invHad.{1, x, y, z} > 0]});
   mf = Function @@ {{p1, p2, p3, x, y}, f[invHad.m /. section]};
   sectionPlot = 
    ParametricPlot3D @@ {Rest[m] /. section, {x, -3, 3}, {y, -3, 3}, 
      RegionFunction -> rf, MeshFunctions -> {mf}};
   anchorPlot = Graphics3D[Sphere[Rest[#], .05] & /@ anchors];
   Show[simplex, sectionPlot, anchorPlot]
   );
plots = Table[
   plotSection2D[entropy, anchorSets[[rep]]], {rep, reps}];
GraphicsGrid[Partition[plots, 3]]
18
demandé sur Community 2010-09-20 09:42:07

1 réponses

la bonne solution de programmation est, dans les grandes lignes:

  • observez que les centres viennent en paires projectives -- ainsi identifiez et retenez seulement la moitié des centres qui sont dans l'un ou l'autre des couvertures hémisphériques de l'ensemble des centres. Les paires sont des compléments fixes les uns des autres. Une règle d'exemple: tous les sous-ensembles contenant vertex 1, et de ceux sur l '"équateur", ceux contenant vertex 2, et sur l ' "équateur" de cet ensemble, ceux contenant vertex 3, et ainsi de suite la moitié de la limite adjacente au plus petit sommet indexé.
  • observez que pour chaque subbimplex, soit le subbimplex est adjacent au sommet 1, soit il est à la distance 1 du simplex. (Cause: chaque nouveau vertex dans le tétraèdre est attaché à chaque vertex précédent du tétraèdre -- par conséquent chaque subsidmplex est soit incident sur le vertex 1 ou le vertex 1 est connecté à chaque vertex dans le simplex.) Par conséquent, il n'y a que deux populations de chaque type de subsimplex (avec l'égard d'un sommet spécifiée). (Nous pouvons remplacer cette observation par la décision de ne garder que le plus petit membre de chaque paire projective, mais alors la règle pour étiqueter les sommets est plus compliquée.)
  • les tétraèdres sont complètement symétriques sous la permutation des étiquettes du sommet. Par conséquent, n'importe quelle "section intéressante" est équivalente à une autre section contenant seulement le segment principal des sommets -- c.-à-d. peut être identifiée parmi la gamme des sommets[1, n] pour certains n.

  • en recueillant ce qui précède, nous trouvons qu'il y a une surjection d'une section intéressante à un ensemble de graphiques. Pour chaque graphique, nous devons énumérer les adhésions vertex cohérentes (décrites plus loin). À l'exception d'un vertex, les sommets du graphe viennent par paires

    • La paire contient tous les centres de cardinalité (tous les subsimplices d'une dimension donnée).
    • un membre de la paire contient des centres incidents sur le vertex 1.
    • l'autre membre de la paire contient des centres Non incidents sur le vertex 1.
    • le vertex spécial est soit le centre contenant tous les sommets, soit sa paire projective (le "centre vide").
    • si un graphe contient n'importe quel membre d'une paire, il doit (au moins) contenir le membre contenant les centres incident sur 1 (ou les sommets peuvent être réétiquetés pour faire ceci ainsi).
  • les bords du graphique sont pondérés. Le poids est le nombre de les sommets partagés par les deux centres. Il y a des restrictions sur le poids basé sur la cardinalité des centres à chaque extrémité et basé sur si les deux sommets sont les deux premiers membres, les deux deuxièmes membres, ou sont un de chacun. ("Un de chaque" ne peut pas partager vertex 1, par exemple.)
  • un graphe est Un sous-graphe complet sur l'ensemble de sommets, contenant le sommet spécial. Par exemple, pour le tétraèdre, un graphe est un K_{3} sur l'ensemble des sommets identifiés ci-dessus, avec un vertex spécial et à bord des poids.
  • une section est un graphe avec une application cohérente des étiquettes aux centres à l'extrémité de chaque bord (c.-à-d. étiqueté de façon cohérente pour respecter le nombre de Sommets partagés indiqué par le poids du bord et que chaque sous-ensemble dans un ensemble de sommets de graphe contient vertex 1). Un graphique donné peut donc représenter plusieurs sections (via différents labelings). (Qu'il n'y ait pas autant d'options que cela semble comme s'il y avait aura un sens dans un deuxième.)
  • une section n'est pas intéressante si la matrice faite à partir des coordonnées de ses centres a un déterminant zéro.

dans le cas de trois dimensions, avec quatre sommets, nous obtenons les ensembles suivants (nous utilisons la paire projective courte parce qu'il y a assez de visibilité dans cet exemple pour ne pas nécessiter la règle de rejet d'étiquetage plus simple du vertex):

0: paire projective de {1,2,3,4}

1: {1}

1': {2},{3},{4}

2: {1,2},{1,3},{1,4}

2': projective paires de 2 (si omis)

3: projective paires à 1' (si omis)

3': projective paires à 1 (omis)

contraintes D'étiquette:

{0- > x,x}

{0- > x',x}

{1 - >1,1} -- refusé: les centres ne sont pas inclus deux fois

{1->1',0}

{1 - > 2,1}

{2 - > 2,1}

Pas d'autres des poids sont possibles avec ces sommets de graphe.

un graphe est Un K_{3} incident sur 0, les graphiques suivants survivre le graphe des règles de sélection:

Un: {0->1,1},{0->1',1},{1->1',0}

B: {0->2,2},{0->2,2},{2->2,1}

A n'a qu'un étiquetage: {1},{2},{} et est votre triangulaires intéressants. Cet étiquetage n'a pas de zéro déterminant.

B n'a qu'un étiquetage: {1,2},{1,3},{} et est votre place intéressante. Ce l'étiquetage n'a pas de zéro déterminant.

Conversion de code est laissé comme exercice au lecteur (parce que je dois partir pour le travail).

4
répondu Eric Towers 2010-11-11 13:35:54