Список всех интересных сечений тетраэдра

Обновление ответа, 22 декабря: использование наблюдение, что существует гомоморфизм между отдельными секциями и перестановками объектов в кубе, перечислите все такие перестановки, представив группу симметрии куба как подгруппу SymmetricGroup[8] и используя GroupElements/Permute, найдите назначения центроидов с помощью решателя Mathematica SAT, выберите наборы точек с различными сингулярными значениями, еще несколько деталей и полный код, указанный здесь

Вопрос

Интересным 2D сечением является плоскость, проходящая через центр обычного 3D симплекса и двух других точек, каждая из которых является центром тяжести некоторого непустого подмножества вершин. Он определяется двумя подмножествами вершин. Например, {{1},{1,2}} дает плоскость, определяемую тремя точками — центром тетраэдра, первой вершиной и средним значением первой и второй вершин.

Интересным набором сечений является множество, в котором никакие два сечения не определяют одну и ту же плоскость при перемаркировке вершин. Например, набор {{{1},{2}},{{3},{4}}} не интересен. Существует ли эффективный подход к поиску интересного набора интересных разделов? Мне нужно что-то, что можно было бы обобщить на аналогичную задачу для 3D-сечений 7D-симплекса и закончить за ночь.

Мой предпринятый подход ниже. Одна проблема заключается в том, что если вы игнорируете геометрию, некоторые эквивалентные разделы будут сохранены, поэтому я получаю 10 разделов вместо 3. Более серьезная проблема заключается в том, что я использовал грубую силу, и она определенно не масштабируется и (требуется 10 ^ 17 сравнения для 7D симплекс)


(источник: yaroslavvb.com)

Вот код Mathematica для создания изображения выше.

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]]

person Yaroslav Bulatov    schedule 20.09.2010    source источник
comment
Можете ли вы объяснить, почему {{1,2},{3,4}} неинтересны? Что такое перемаркировка, которая дает тот же раздел?   -  person ysap    schedule 22.09.2010
comment
Вы сопоставляете вершину 1 с вершиной 3 и вершину 2 с вершиной 4. Это не интересно, потому что секции выглядят одинаково. На моей картинке вы можете видеть, что есть только две разные формы - треугольник и квадрат. Все остальное - это своего рода вращение/отражение этих фигур.   -  person Yaroslav Bulatov    schedule 22.09.2010
comment
Я несколько раз пытался разобраться в обозначениях {{1},{1,2}} и {{{1},{2}},{{3},{4}}}, но не смог. Можете ли вы предоставить ссылку, которая объясняет это?   -  person Dialecticus    schedule 15.10.2010
comment
Каждая секция определяется набором центроидов. Каждый центроид определяется набором вершин. Следовательно, множество секций {{{1},{2}},{{3},{4}}} имеет 3 уровня вложенности -- секции, центроиды, вершины. Кстати, на этот вопрос ответил Питер Шор для 7-мерного симплекса mathoverflow.net/questions/39429/   -  person Yaroslav Bulatov    schedule 15.10.2010
comment
Итак, если я понимаю проблему, вам нужно найти надмножество вершин и получить в нем центр тяжести каждого набора. Затем создайте каждую плоскость, которая пересекает каждые две из них вместе с центроидом симплекса... верно?   -  person JoshD    schedule 22.10.2010
comment
по сути, я предполагаю, что вы имели в виду подмножество   -  person Yaroslav Bulatov    schedule 24.10.2010
comment
Ура... {{1,2},{3,4},{1,2,3,4}} не определяют плоскость. Три центроида коллинеарны. На самом деле любой центроид сопряжен, и {1,2,3,4} коллинеарны. (Здесь сопряжение — это биекция, отображающая набор вершин в набор всех остальных вершин. Например, {1,2} ‹-> {3,4} ; {1,2,3} ‹-> {4}. )   -  person Eric Towers    schedule 25.10.2010
comment
Правильно, если вы выбираете вершины произвольно, вы можете получить вырожденные сечения. Проверка на коллинеарность проста, в отличие от перечисления неэквивалентных участков, вырожденных или нет.   -  person Yaroslav Bulatov    schedule 25.10.2010
comment
Вы когда-нибудь успешно решали эту проблему? Вам все еще нужна помощь с этим?   -  person jcolebrand    schedule 14.12.2010
comment
@drachenstern: был предложен алгоритм, но он выглядит запутанным, и автор не предоставил код, какой-нибудь код C/Java/Python или Mathematica, который работает для 7 измерений, был бы удобен   -  person Yaroslav Bulatov    schedule 14.12.2010


Ответы (1)


Правильное решение для программирования в общих чертах:

  • Заметьте, что центры входят в проективные пары, поэтому определите и сохраните только половину центров, которые находятся в той или иной полусферической оболочке набора центров. Пары дополняют друг друга. Пример правила: все подмножества, содержащие вершину 1, и те, что на «экваторе», те, которые содержат вершину 2, и на «экваторе» этого набора, те, которые содержат вершину 3, и т. д. рекурсивно сохраняя границу наполовину смежной с наименьшим индексом вершина.
  • Заметим, что для каждого подсимплекса либо он смежн с вершиной 1, либо находится на расстоянии 1 от симплекса. (Причина: каждая новая вершина тетраэдра соединена с каждой предыдущей вершиной тетраэдра — следовательно, каждый подсимплекс либо инцидентен вершине 1, либо вершина 1 соединена с каждой вершиной симплекса.) Следовательно, существует только две совокупности каждого вид подсимплекса (относительно заданной вершины). (Мы можем заменить это наблюдение решением оставить только меньший член каждой проективной пары, но тогда правило маркировки вершин будет более сложным.)
  • Тетраэдры полностью симметричны относительно перестановки меток вершин. Следовательно, любой «интересный участок» эквивалентен другому участку, содержащему только начальный сегмент вершин, т. е. может быть идентифицирован среди вершин Range[1,n] для некоторого n.

  • Собрав вышеизложенное, мы обнаруживаем, что существует сюръекция из интересующего сечения на множество графов. Для каждого графа мы должны перечислить согласованные принадлежности вершин (описано позже). За исключением одной вершины, вершины графа идут парами

    • The pair contains all centers of a given cardinality (all subsimplices of a given dimension).
    • Один член пары содержит центры, инцидентные вершине 1.
    • Другой член пары содержит центры, не инцидентные вершине 1.
    • Специальная вершина — это либо центр, содержащий все вершины, либо его проективная пара («пустой центр»).
    • Если граф содержит какой-либо член пары, он должен (по крайней мере) содержать элемент, содержащий центры, инцидентные 1 (или вершины могут быть перенумерованы, чтобы сделать это так).
  • Ребра графа взвешены. Вес — это количество вершин, общих для двух центров. Существуют ограничения на вес, основанные на мощности центров на каждом конце и на основе того, являются ли две вершины первыми элементами, обеими вторыми элементами или одним из них. («Один из каждого» не может иметь общую вершину 1, например.)
  • Граф — это полный подграф на множестве вершин, содержащий особую вершину. Например, для тетраэдра граф представляет собой K_{3} на наборе вершин, указанном выше, с одной особой вершиной и с весами ребер.
  • Раздел представляет собой граф с последовательным применением меток к центрам в конце каждого ребра (т. е. последовательно помечен, чтобы учесть количество общих вершин, указанное весом ребра, и что каждое подмножество в одном наборе вершин графа содержит вершину 1) . Таким образом, данный граф может представлять несколько разделов (через разные маркировки). (То, что вариантов не так много, как кажется, будет понятно через секунду.)
  • Сечение не представляет интереса, если матрица, составленная из координат его центров, имеет нулевой определитель.

В случае трех измерений с четырьмя вершинами мы получаем следующие наборы (мы используем короткую проективную пару, потому что в этом примере достаточно видимости, чтобы не требовать более простого правила отказа от маркировки вершин):
0: проективная пара { 1,2,3,4}
1: {1}
1': {2},{3},{4}
2: {1,2},{1,3}, {1,4}
2': проективные пары до 2 (поэтому опущены)
3: проективные пары до 1' (поэтому опущены)
3': проективные пары до 1 (поэтому опущены)

Ограничения меток:
{0->x,x}
{0->x',x}
{1->1,1} -- запрещено: центры не включаются дважды
{ 1->1',0}
{1->2,1}
{2->2,1}
Никакие другие веса для этих вершин графа невозможны.

Граф представляет собой K_{3}, инцидентный 0, следующие графы выдерживают правила выбора графа:
A: {0->1,1},{0->1',1},{1->1 ',0}
Б: {0->2,2},{0->2,2},{2->2,1}

A имеет только одну маркировку: {1},{2},{} и представляет собой интересующий вас треугольный набор. Эта маркировка не имеет нулевого определителя.
B имеет только одну маркировку: {1,2},{1,3},{} и является интересующим вас квадратным множеством. Эта разметка не имеет нулевого определителя.

Преобразование в код оставлено читателю в качестве упражнения (потому что мне нужно уйти на работу).

person Eric Towers    schedule 11.11.2010
comment
Интересные наблюдения, хотя я не вижу непосредственно алгоритма, которому они соответствуют - person Yaroslav Bulatov; 11.11.2010
comment
(1) Создавайте графики взвешенных сечений и удаляйте недопустимые графики. (2) Для каждого сохранившегося графа сечения сгенерируйте все возможные метки вершин тетраэдра и удалите те, которые имеют нулевой объем. Трехмерная версия задачи достаточно проста, поэтому упражнение по созданию всех возможных взвешенных графов, а затем убеждение себя в том, что все графы, кроме A и B выше, либо запрещены, либо избыточны, является поучительным. Для маркировки есть две части: итерация по степени перекрытия между ребрами, приземляющимися в одном и том же центре, а затем применение меток с помощью жадного алгоритма. - person Eric Towers; 12.11.2010
comment
Я нашел более прямой способ, используя функции теории групп новой версии, но спасибо за усилия - person Yaroslav Bulatov; 22.12.2010