Вращение тетреэдра для 3d тесселяции - PullRequest
1 голос
/ 05 июля 2011

Я пытаюсь визуализировать некоторую 3D-графику с кучей тетраэдров .Я пытаюсь понять, как повернуть один тетраэдр так, чтобы он был идеально лицом к лицу с другим тетраэдром.Если это сбивает с толку, то несколько тетраэдров, соприкасающихся лицом к лицу, выглядят как this .

Я использую OpenGL для программного поворота объектов, поэтому я могу вращаться только на одной из трех осей ввремя.Например, я могу вращаться по часовой стрелке на 20 градусов по оси X, затем против часовой стрелки на 45 градусов по оси Z и т. Д.

Я понимаю программный аспект этой программы (используя функцию glRotatef () OpenGL для поворота на одну ось за раз), но меня больше интересуют конкретные углы, необходимые для каждой оси для достижения 3d тесселяции.

Спасибо за любую помощь, дайте мне знать, если вам нужно больше разъяснений.

1 Ответ

3 голосов
/ 05 июля 2011

Если бы они должны быть идеально лицом к лицу, я бы вообще не пытался найти вращение.

Вместо этого я бы начал с одного тетраэдра.Решите, какая грань будет использоваться со следующей.

Возьмите перекрестное произведение двух ребер на этой грани (50% вероятности того, что она указывает в направлении 4-й точки, в этом случае инвертируйте вектор).Нормализация.Умножьте на sqrt (6) / 3 * edge_length (это константа, предварительно вычислите!).

Теперь у вас есть вектор, указывающий в направлении 4-й вершины нового тетраэдра (остальные 3, которые вы уже знаете, онивы такие же, как и на лице!), с длиной высоты нового тетраэдра.

Все, что вам сейчас нужно, это начало координат вашего вектора: возьмите среднее арифметическое координат 3 общихвершины, которые дадут центральную точку этой грани.

Добавьте вектор к этой точке, чтобы получить конечную точку.

Теперь вы, два тетраэдра, разделяете одну грань (независимо от ориентации),вращение не требуется.

...