Проецирование точек из 4d-пространства в 3d-пространство в Mathematica

Предположим, что у нас есть набор точек с ограничением, что для каждой точки все координаты неотрицательны, а сумма координат равна 1. Это ограничивает точки, чтобы лежать в 3-мерном симплексе, поэтому имеет смысл попытаться отобразить это обратно в трехмерное пространство для визуализации.

Карта, которую я ищу, будет иметь экстремальные точки (1,0,0,0), (0,1,0,0), (0,0,1,0) и (0,0,0,1) вершинам "красиво расположенного" правильного тетраэдра. В частности, центр тетраэдра будет в начале координат, одна вершина будет лежать на оси z, одна грань параллельна плоскости x,y, а одна грань параллельна оси x.

Вот код, который делает аналогичные вещи для точек в 3-х измерениях, но не кажется очевидным, как расширить его до 4. В основном я ищу 4-мерные эквиваленты функций tosimplex (который переводит 4 измерения в 3), и он обратный fromsimplex

A = Sqrt [2/3] {Cos [#], Sin [#], Sqrt [1/2]} & / @ 
    Таблица [Pi/2 + 2 Pi/3 + 2 k Pi/3, {k, 0, 2}] // Транспонирование;
B = обратная [A];
tosimplex [{x_, y_, z_}]: = Most [A. {x,y, z}];
fromsimplex [{u_, v_}]: = B. {u, v, Sqrt [1/3]};

(* проверяет *)
extreme = {{1, 0, 0}, {0, 1, 0}, {0, 0, 1}};
Графика [Полигон [tosimplex /@ extreme]]
fromsimplex[tosimplex[#]] == # & /@ extreme 

Ответ:

прямая переформулировка ответа деинста в терминах матриц дает следующее. (1/sqrt[4] подходит как 4-я координата, потому что это расстояние до симплекс-центра)

A = Транспонировать [{{-(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 = обратная [A];
tosimplex [{x_, y_, z_, w_}]: = Most [A. {x,y, z, w}];
fromsimplex [{t_, u_, v_}]: = B. {t, u, v, 1 / Sqrt [4]};

(* Проверяет *)
extreme = Table[Array[Boole[# == i] &, 4], {i, 1, 4}];
Graphics3D[Сфера [tosimplex[#], .1] & /@ extreme]
fromsimplex[tosimplex[#]] == # & /@ extreme

2 ответа

Решение

Ты хочешь

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

И это линейное преобразование, поэтому вы преобразуете

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

Изменить Вы хотите центр в начале координат - просто вычтите среднее из четырех точек. сожалею

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

Одна возможность:

  1. Генерация четырех (неортогональных) 3-векторов, \vec{v}_i от центра тетраэдра к каждой вершине.
  2. За каждые четыре позиции x = (x_1 .. x_4) сформировать векторную сумму \Sum_i x_i*\vec{v}_i,

Конечно, это отображение не является уникальным в целом, но вы требуете, чтобы x_iСумма к 1 стесняет вещи.

Другие вопросы по тегам