НачалоСодержаниеПрочееГостевая

Назад Transformator4D

Далее Transformator4D Версия 2


Программа Transformator4Dv1

При запуске ищет файлы "acrTrans1F.txt" и "acrTrans1A.txt". Должным образом обрабатывает и показывает на экране результат.

Первый файл описывает модель, второй аффинные преобразования. Преобразования применяются ко всему объекту.

Описание файла "acrTrans1F.txt"

Файл содержит информацию о четырехмерном объекте (фигуре).

 

Формат файла (в порядке следования)

Количество значений Описание Возможные значения
1 Замкнутость полигонов Замкнутые - 1

Незамкнутые - 0

3 Цвет фигуры r g b Вещественное число

от 0 до 1

1 Количество полигонов (nP) Натуральное число <100
k-ый полигон , k - от 1 до nP
1 Количество вершин (nV) Натуральное число <100

v-ая вершина v - от 1 до nV

4 Координаты вершины в виде (x,y,z,q) Вещественные числа
Цвет указывается тремя компонентами RGB: красный, зеленый, синий.

В следующей таблице приведены примеры некоторых цветов

Основные цвета

Цвет RGB
Белый   1 1 1
Черный   0 0 0
Красный   1 0 0
Зеленый   0 1 0
Синий

 

0 0 1

Другие цвета

Цвет RGB
  0  1  0.5
  0.5  0.5  0.5
  0.5  0  0
  0.25  0.5  0.5
  1  1  0
Цвет RGB
  0.5  0  0.25
  0  0  0.5
  0  0.25  0.25
  1  0.5  0
  1  0  1
 

Например, следующий набор данных описывает тетраэдр в в трехмерном пространстве (q=0) с вершинами начале координат и сторонами на осях (комментарии не являются частью файла)

1 //замкнутые полигоны

0 0 0.5 //темно синий цвет

3 //всего три полигона

3 //первый полигон, три вершины

0 0 0 0 //x,y,z,q

1 0 0 0 //x,y,z,q

0 1 0 0 //x,y,z,q

3  //второй полигон, три вершины

0 0 0 0 //x,y,z,q

0 1 0 0 //x,y,z,q

0 0 1 0 //x,y,z,q

3  //третий полигон, три вершины

0 0 0 0 //x,y,z,q

0 0 1 0 //x,y,z,q

1 0 0 0 //x,y,z,q


 

Описание файла "acrTrans1A.txt"

Первым в файле указывается вектор проекции четырехмерного пространства на трехмерное. например (0 0 0 q) создает ортографическую проекцию. Вектор можно менять в течение работы с программой. А здесь устанавливается первоначальное значение.

Файл содержит информацию об аффинных преобразованиях объекта описанного в предыдущем файле.

Типы аффинных преобразований: статичные и динамичные.

Статичные - постоянные преобразования. Не зависит от шага.

Динамичные аффинные преобразования - преобразования, зависящие от шага.

Шаг (step):  (1) - вперед, (-1) - назад. Изменятся интерактивно. При запуске программы шаг=1. 

Например, необходимо добиться следующего результата.

Гиперкуб со ребром 2 вращается вокруг своего центра по всем возможным положительным направлениям с коэффициентами (1,2,3,4,5,6 - соответственно каждому направлению). Его центр находится в точке (3,3,3,3).

Так как необходимое вращение происходит вокруг плоскостей проходящих через начала координат, а гиперкуб мы построили относительно одной из его вершин находящейся в точке (0,0,0,0), то для достижения желаемого эффекта необходимо сначала переместить его центр в начало координат, то есть сдвинуть на

(-0.5,-0.5,-0.5,-0.5) (статичное перемещение). После этого увеличит в 2 раза (статичное масштабирование). Таким образом мы подготовили объект к вращению.

Мы его поворачиваем с соответствующими направлениям коэффициентами в зависимости от шага (динамичное вращение). После получения окончательного результата мы должны сместить центр куба в точку (3,3,3,3) (статичное перемещение).

Описание требуемых аффинных преобразований.

Статичное Смещение (-0.5,-0.5,-0.5,-0.5) Статичное Масштабирование (2,2,2,2).

Динаминый поворот на 1 градус умноженного на шаг. Вращение в каждом направлении изменяется в соответствие поставленной задачи.

(xy=1  xz=2  xq=3  yz=4  yq=5  zq=6).

Статичное Перемещение (3,3,3,3)

Количество преобразований ограничено - максимум 100 штук (на руки).

Поддерживаются преобразования нескольких видов

Название Код Параметры (вещественные)

Статичные преобразования

Масштабирование 1 meter x y z q

(коэффициенты масштабирования по каждой оси)

Перемещение 2 meter  x y z q

(смещение по каждой оси)

Поворот 3 angle xy xz xq yz yq zq

(угол, и его коэффициенты поворота от одной оси к другой)

Динамичные преобразования

Масштабирование 4 meter  x   y   z   q 
Перемещение 5 meter   x   y   z   q
Поворот 6 angle xy xz xq yz yq zq
 

Meter - общий (для конкретного преобразования) параметр , на него умножаются остальные так называемые "коэффициенты  участия" и передаются в процедуру преобразования.

 

Название Параметры, получаемые процедурой преборазования
Масштабирование meter*x meter*y  meter*z  meter*q
Перемещение  meter*x  meter*y  meter*z  meter*q
Поворот angle*xy  angle*xz  angle*xq  angle*yz  angle*yq  angle*zq

Например, Масштабирование (комментарии не являются частью файла)

1 // код преобразования Масштабирование

2 //Meter - коэффициент масштабирования

1 2 0 0 //по x масштабировать в размере meter, по y масштабировать 2*meter, по z и q не масштабировать.

2 //код Перемещение

0.1// на одну десятую

0 10 1 -3 // по x не перемещать, по y перемещать на 1=0.1*10, по z перемещать на 0.1, по q в противоположную сторону на (-3)meter

Последние две точки можно записать под другому, но результат от этого не изменится

Вариант №1

-0,1

0    -10   -1   3

Вариант №2

1

0    1    0.1     -0.3

и т.д. Результат преобразования будет одинаковый, так как в матрицу преобразования попадают произведения meter и соответствующих коэффициентов.


 

В повороте указывается угол (angle) поворота в градусах. Коэффициенты для каждой плоскости вращения. Например запись

3 // поворот

45 0 0 1 -2 0 0 //параметры

указывает на угол поворота 45 градусов. при этом поворот не производится в плоскостях xy, xz, yq, zq (нули). И производится от  x к q (четвертая единица) и от z к  y с размерностью 2 (минус означает противоположное направление, 2 - то, что поворот будет производиться на 2*angle=90 градусов)

Кстати, то же самое можно записать вот так

1 0 0 45 -90 0 0

Зависимость от шага

название Код Параметры (вещественные)
Масштабирование 4 meter + шаг
Перемещение 5 meter × шаг
Поворот 6 angle × шаг

 

Формат файла.

Количество значений Описание Возможные значения
4 Вектор проекции Вещественные числа
1 Количество аффинных преобразований Целое число

k-ое преобразование

1 Код вида преобразования №1 1, 2, 3,4,5,6
количество параметров для соответствующего преобразования
  5 Масштабирование Вещественные числа
5 Перемещение Вещественные числа
7 Поворот Вещественные числа
1 Код вида преобразования №2 1, 2, 3,4,5,6

описание преобразования

1 Код вида преобразования №3 1, 2, 3,4,5,6

описание преобразования

...и так далее...

Например, опишем преобразования рассмотренные выше: статичное перемещение на -0,5, динамичное вращение, перемещение на +3. Изменим лишь вращение, таким образом чтобы поворот происходил не в направлении x-q, а от q к x .  (комментарии не являются частью файла)

//начало

4 //количество преобразований

2 // статичное перемещение

-0.5 -0.5 -0.5 -0.5 //смещение на -0,5 по всем осям. Центр куба оказался в точке 0,0,0,0

1// статитчное масштабирование

2 2 2 2 //увеличение в 2 раза по всем осям

3 // динамичный поворот

1 //угол 1 градус

1 2 -3 4 5 6 // коэффициенты поворота. (-3) означает, что происходит поворот в противоположном направлении на 3 градуса за шаг.

2 //статичное перемещение перемещение

3 3 3 3

//конец.


Задача.

Есть квадрат со стороной 1 и вершиной в начале координат. В плоскости xy.

Необходимо добиться кругового полета вокруг оси x на расстоянии 3 от этой оси, и в отдалении от плоскости yz на 2. При этом квадрат должен находится в плоскости параллельной yz и вращаться вокруг своего центра.

Схема задачи

Сначала создадим квадрат

Замкнутый полигон - 1

Цвет черный 0 0 0

1 полигон

4 вершины

///////// Файл acrTrans1F.txt

1
0 0 0
1
4

0 0 0 0
1 0 0 0
1 1 0 0
0 1 0 0

///////////
Файл объекта готов.

Начнем создавать последовательность аффинных преобразований.

Повернем его вокруг y 90 градусов от x к z.

Этот поворот не зависит от шага, поэтому необходимо использовать код 3, с углом (тоже понятно) 90 градусов . Следующие шесть параметров xy xz xq yz yq zq указывают от чего к чему производить поворот нам нужен второй параметр - xz.  Все остальные нули.

3 90 0 1 0 0 0 0

Чтобы вращать квадрат вокруг собственного центра, надо сделать так чтобы этот центр попал в начало координат.

Сторона квадрата равна 1, значит смещаем на 0.5 в отрицательную сторону по y и z статичным перемещением.

2 -0.5 0 1 1 0

Начинаем вращать по направлению стрелки, а это значит от z и y. Значит нам нужен четвертый элемент последовательности (xy xz xq yz yq zq) со знаком минус.

Вращение будет динамичным, а значит код 6. Сделаем по 5 градусов за шаг.

6 5 0 0 0 -1 0 0

Теперь необходимо сместить наш квадрат на радиус окружности-траектории вращения центра квадрата вокруг оси x. Как смещать? По y или по z? В задаче не указано первоначальное положение, значит разницы нет.

Давайте на 1 по y

Статичное перемещение, но чтобы скучно не было сделаем так

2 -0.2 0 -15 0 0

и получим смещение на 3 в положительную сторону по y.

Далее необходимо обозначить вращение вокруг оси x от y к z.

Сделаем медленное вращение по 1 градусу.

6 1 0 0 0 1 0 0

И смещаем по x на 3

2 3 1 0 0 0

Соберем все записи вместе

3 90 0 1 0 0 0 0

2 -0.5 0 1 1 0

6 5 0 0 0 -1 0 0

2 -0.2 0 -15 0 0

6 1 0 0 0 1 0 0

2 3 1 0 0 0

Получили последовательность из шести аффинных преобразований

Создаем файл при начальном векторе проекции (0,0,0,1)

////////// Файл acrTrans1A.txt

0 0 0 1

6

3 90 0 1 0 0 0 0

2 -0.5 0 1 1 0

6 5 0 0 0 -1 0 0

2 -0.2 0 -5 0 0

6 1 0 0 0 1 0 0

2 3 1 0 0 0

//////////

Попробуйте указать последовательность преобразований в обратном порядке и посмотрите, что получилось.



Назад Transformator4D

Далее Transformator4D Версия 2


НачалоСодержаниеПрочееГостевая

©2007 AnCoRecords   "d'Amateur: Записки 4D любителя"    E-mail автору

 

Hosted by uCoz