Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример программы. В прямоугольной изометрической проекции нарисовать две параллельные линии, лежащие на плоскости XY, а затем повернуть их на 90о против часовой стрелки вокруг



В прямоугольной изометрической проекции нарисовать две параллельные линии, лежащие на плоскости XY, а затем повернуть их на 90о против часовой стрелки вокруг осей X и Y, сдвинув на 150 пикселей изображение по оси Z и на 100 пикселей по оси Y. Фрагмент программы, реализующий построение локальной системы координат, выделен в отдельную процедуру. Рекомендуется фиксировать положение линий после каждого выполненного преобразования, что упрощает процесс отладки программы.

Листинг программы

Program Linii3;

uses

Graph, Crt;

var

GraphDriver:integer;

GraphMode:integer;

x11, x12, x21, x22, y11, y12, y21, y22, z11, z12, z21, z22:real; {координаты концов линий в исходном положении}

x11y, x12y, x21y, x22y, y11y, y12y, y21y, y22y, z11y, z12y, z21y, z22y:real; {модифицированные координаты после поворота вокруг оси Y}

x11x, x12x, x21x, x22x, y11x, y12x, y21x, y22x, z11x, z12x, z21x, z22x:real; {модифицированные координаты после поворота вокруг оси X}

x11m, x12m, x21m, x22m, y11m, y12m, y21m, y22m, z11m, z12m, z21m, z22m:real; {модифицированные координаты после сдвига по осям}

dx, dy:integer; {сдвиг локальных координат относительно глобальных}

sy, sz:real; {сдвиг изображения по осям Y и Z в локальной системе коорди- нат}

ax, ay:real; {углы поворота вокруг осей X и Y соответственно}

procedure XYZ(xn, yn:integer); {процедура построения трехмерной координатной системы на экране}

begin

SetLineStyle(0,0,1);

Line(xn, yn, xn, 5); {вычерчивание оси Z}

Line(xn, 5, xn-5, 15);

Line(xn, 5, xn+5, 15);

Line(xn, yn, 60, yn+Round((dx-60)*0.5774)); {вычерчивание оси X}

Line(60, yn+Round((dx-60)*0.5774), 64, yn+Round((dx-60)*0.5774)-10);

Line(60, yn+Round((dx-60)*0.5774), 71, yn+Round((dx-60)*0.5774));

Line(xn, yn, 580, yn+Round((580-dx)*0.5774)); {вычерчивание оси Y}

Line(580, yn+Round((580-dx)*0.5774), 576, yn+Round((580-dx)*0.5774)-10);

Line(580, yn+Round((580-dx)*0.5774), 569, yn+Round((580-dx)*0.5774));

SetColor(14);); {установка цвета для вывода символов}

SetTextJustify(0,0);); {установка стиля выравнивание текста}

SetTextStyle(0, 0, 1); {установка стиля текста}

OutTextXY(45, yn+Round((dx-60)*0.5774), 'X'); {вывод заголовка оси X}

OutTextXY(590, yn+Round((580-dx)*0.5774), 'Y'); {вывод заголовка оси Y

OutTextXY(xn-15, 15, 'Z'); {вывод заголовка оси Z}

end;

procedure Linii(x11p, x12p, y11p, y12p, z11p, z12p, x21p, x22p, y21p, y22p, z21p, z22p:real); {процедура вычерчивания линий}

begin

SetLineStyle(0, 0, 3); {изменение толщины линий}

SetColor(8); {установка цвета вычерчивания первой линии}

Line(dx+Round(0.71*(y11p-x11p)), dy+Round(0.82*(-z11p+0.5*(x11p+ y11p))), dx+Round(0.71*(y12p-x12p)), dy+Round(0.82*(-z12p+0.5* (x12p+y12p))));

SetColor(10); {установка цвета вычерчивания второй линии}

Line(dx+Round(0.71*(y21p-x21p)), dy+Round(0.82*(-z21p+0.5*(x21p+ y21p))), dx+Round(0.71*(y22p-x22p)), dy+Round(0.82*(-z22p+0.5* (x22p+y22p))));

end;

begin

GraphDriver:=Detect;

InitGraph(GraphDriver, GraphMode, '');

SetBkColor(9); {установка светло-синего цвета фона}

ClearDevice; {закрашивание экрана цветом фона}

dx:=320; {задание величин сдвига локальной системы координат относительно гло-бальной}

dy:=250;

XYZ(dx, dy); {вычерчивание трехмерной системы координат на экране}

x11:=0; {задание координат концевых точек линий}

y11:=0; z11:=0; x12:=0; y12:=100; z12:=0; x21:=50;

y21:=0;

z21:=0;

x22:=50;

y22:=100;

z22:=0;

Linii(x11, x12, y11, y12, z11, z12, x21, x22, y21, y22, z21, z22); {вычерчивание линий в исходном состоянии}

Readln; {задержка изображения до нажатия клавиши Enter}

ay:=1.57; {задание угла поворота изображения вокруг оси Y}

ax:=1.57; {задание угла поворота изображения вокруг оси X}

sy:=100; {задание сдвига по оси Y}

sz:=150; {задание сдвига по оси Z}

{вычисление координат изображения, повернутого вокруг оси Y}

x11y:=x11*cos(ay)+z11*sin(ay);

y11y:=y11;

z11y:=-x11*sin(ay)+z11*cos(ay);

x12y:=x12*cos(ay)+z12*sin(ay);

y12y:=y12;

z12y:=-x12*sin(ay)+z12*cos(ay);

x21y:=x21*cos(ay)+z21*sin(ay);

y21y:=y21;

z21y:=-x21*sin(ay)+z21*cos(ay);

x22y:=x22*cos(ay)+z22*sin(ay);

y22y:=y22;

z22y:=-x22*sin(ay)+z22*cos(ay);

Linii(x11y, x12y, y11y, y12y, z11y, z12y, x21y, x22y, y21y, y22y, z21y, z22y); {отображение линий, повернутых вокруг оси Y на 900}

Readln;

{вычисление координат изображения, повернутого вокруг оси X}

x11x:=x11y;

y11x:=y11y*cos(ax)-z11y*sin(ax);

z11x:=y11y*sin(ax)+z11y*cos(ax);

x12x:=x12y;

y12x:=y12y*cos(ax)-z12y*sin(ax);

z12x:=y12y*sin(ax)+z12y*cos(ax);

x21x:=x21y;

y21x:=y21y*cos(ax)-z21y*sin(ax);

z21x:=y21y*sin(ax)+z21y*cos(ax);

x22x:=x22y;

y22x:=y22y*cos(ax)-z22y*sin(ax);

z22x:=y22y*sin(ax)+z22y*cos(ax);

Linii(x11x, x12x, y11x, y12x, z11x, z12x, x21x, x22x, y21x, y22x, z21x, z22x); {отображение линий, повернутых вокруг оси X на 900}

Readln;

x11m:=x11x;

x12m:=x12x;

x21m:=x21x;

x22m:=x22x;

{вычисление координат изображения, cдвинутого по оси Y}

y11m:=y11x+sy;

y12m:=y12x+sy;

y21m:=y21x+sy;

y22m:=y22x+sy;

{вычисление координат изображения, сдвинутого по оси Z}

z11m:=z11x+sz;

z12m:=z12x+sz;

z21m:=z21x+sz;

z22m:=z22x+sz;

Linii(x11m, x12m, y11m, y12m, z11m, z12m, x21m, x22m, y21m, y22m, z21m, z22m); {отображение линий в конечном положении}

Readln;

Closegraph; {выход из графического режима}

end.

Варианты задания

- для статических преобразований

Создать программу, реализующую графическими средствами языка программирования Turbo Pascal изображения, включающие:

а) локальную систему координат;

б) в начале первого квадранта координат исходное изображение, левая нижняя точка которого имеет координаты (10, 10), а элементы изображения имеют размер не менее 50 пикселей и разную расцветку;

в) преобразованное в соответствии с заданием изображение.

1) ─┼─ - образная фигура зеркально отображается относительно оси Х и увеличивается в 1.5 раза;

2) ─┼─ - образная фигура перемещается вверх на 90 и влево на 150 пикселей с поворотом на 40о по часовой стрелке;

3) ┌─ - образная фигура зеркально отображается относительно диагонали первого квадранта и увеличивается в 2 раза;

4) прямоугольный треугольник перемещается вниз на 40 и вправо на 200 пикселей с поворотом против часовой стрелки на 50о;

5) прямоугольник перемещается вверх на 120 и вправо на 200 пикселей с поворотом по часовой стрелке на 70о;

6) T - фигура зеркально отображается относительно оси Y и поворачивается на 15о по часовой стрелке;

7) ┌─┐- образная фигура смещается вниз на 120 и влево на 140 пикселей с поворотом против часовой стрелки на 73о;

8) правильная трапеция зеркально отображается относительно диагонали первого квад-ранта и уменьшается в 2 раза;

9) ╟ - образная фигура поворачивается на 180о и увеличивается в 1.3 раза;

10) закрашенный треугольник смещается влево на 230 и вниз на 50 пикселей с поворотом по часовой стрелке на 49о;

11) ┼┼ - образная фигура зеркально отображается относительно оси Х с поворотом по ча-совой стрелке на 36о;

12) закрашенный равнобедренный треугольник смещается влево на 130 и вниз на 150 пикселей с поворотом по часовой стрелке на 79о;

13) ± - образная фигура смещается вправо на 60 и вниз на 200 пикселей с увеличением в 2.3 раза;

14) ┌─┘ - образная фигура зеркально отображается относительно оси Y и уменьшается в 1.4 раза;

15) Х - образная фигура поворачивается на 70о против часовой стрелки со смещением влево на 60 и вниз на 140 пикселей;

16) /\ - образная фигура поворачивается на 180о, смещаясь влево и вниз на 100 пикселей;

17) ├┤ - образная фигура зеркально отображается относительно диагонали первого квадранта с увеличением в 1.5 раза;

18) И - образная фигура зеркально отображается относительно оси Х с поворотом по часовой стрелке на 34о;

19) N - образная фигура смещается вверх на 90 и влево на 120 пикселей с поворотом по часовой стрелке на 56о;

20) ┬┬ - образная фигура смещается вправо на 200 и вниз на 70 пикселей с увеличением в 1.8 раза;

- для динамических преобразований

Создать программу, реализующую средствами графики языка программирования Turbo Pascal следующее динамическое изображение:

а) фигура для построения определяется в соответствии с заданиями, приведенными в лабораторной работе N5;

б) исходной изображение строится в начале первого квадранта. Левая нижняя точка изображения имеет координаты (20, 10);

в) изображение перемещается в соответствии со следующими вариантами задания:

1) сдвиг до точки (120, -30) с поворотом на каждом шаге на 1о по часовой стрелке;

2) сдвиг до точки (-60, 60) с увеличением к концу движения фигуры в два раза;

3) сдвиг до точки (100, 90) с поворотом против часовой стрелки на 2о на каждом шаге;

4) сдвиг до точки (-60, -30) с поворотом по часовой стрелке на 3о на каждом шаге;

5) сдвиг до точки (100, -80) с уменьшением к концу движения фигуры в два раза;

6) сдвиг до точки (-80, 60) с поворотом против часовой стрелки на каждом шаге на 1о;

7) сдвиг до точки (140, 130) с поворотом по часовой стрелке на каждом шаге на 2о;

8) сдвиг до точки (70, -80) с увеличением к концу движения фигуры в 1.5 раза;

9) сдвиг до точки (70, 80) с поворотом против часовой стрелки на каждом шаге на 3о;

10) сдвиг до точки (-130, -120) с уменьшением фигуры к концу движения в 2 раза;

11) сдвиг до точки (-60, 170) с поворотом по часовой стрелке на каждом шаге на 1о;

12) сдвиг до точки (80, -110) с поворотом против часовой стрелки на каждом шаге на 2о;

13) сдвиг до точки (140, 130) с поворотом против часовой стрелки на каждом шаге на 3о;

14) сдвиг до точки (-100, -110) с увеличением к концу движения фигуры в 2 раза;

15) сдвиг до точки (-200, 120) с уменьшением к концу движения фигуры в 2 раза;

16) сдвиг до точки (150, -120) с поворотом по часовой стрелке на каждом шаге на 1о;

17) сдвиг до точки (-280, 160) с поворотом против часовой стрелки на каждом шаге на 2о;

18) сдвиг до точки (300, 150) с поворотом по часовой стрелке на каждом шаге на 3о;

19) сдвиг до точки (-280, -140) с поворотом против часовой стрелки на каждом шаге на 1о;

20) сдвиг до точки (60, 170) с увеличением к концу движения фигуры в 1.6 раза;

- для трехмерных преобразований

Создать программу, реализующую средствами графики языка программмирования TurboPascal изображение, включающее:

а) в соответствии с приведенным ниже по вариантам заданием проекцию трехмер-ных координат;

б) в начале координат исходное изображение;

в) преобразованное в соответствии с заданием изображение.

1) Прямоугольная изометрическая проекция. ─┼─ -образная фигура исходно нахо-дится в плоскости XY, а затем сдвигается по оси X на 70 пикселей, оси Y - на -40 пикселей и поворачивается вокруг оси Z на 60о, оси X - на 120о по часовой стрелке.

2) Прямоугольная диметрическая проекция. ─┼─ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на 140 пикселей, по оси Z - на -70 пик-селей и поворачивается вокруг оси Y на 70о по часовой стрелке, вокруг оси X на 50о против часовой стрелки.

3) Косоугольная фронтальная изометрическая проекция. ┌── - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на -80 пикселей, по оси Z - на 100 пикселей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 120о против часовой стрелки.

4) Косоугольная горизонтальная изометрическая проекция. ┌── - образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на -50 пикселей, а по оси Y на 130 пикселей, поворачиваясь вокруг оси Y на 80о против часовой, вокруг оси X на 90о по часовой стрелке.

5) Косоугольная фронтальная диметрическая проекция. ─┬─ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси X на 40, по оси Z - на -70 пикселей, поворачиваясь вокруг оси Y на 60о, вокруг оси Z на 100о против часовой стрелки.

6) Прямоугольная изометрическая проекция. ─┬─ - образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на 90 пикселей, оси Y - на 140 пик-селей и поворачивается вокруг оси Z на 80о, оси X - на 100о по часовой стрелке.

7) Прямоугольная диметрическая проекция. Х - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на -90 пикселей, по оси Z - на 170 пикселей и поворачивается вокруг оси Y на 45о по часовой стрелке, вокруг оси X на 70о против часовой стрелки.

8) Косоугольная фронтальная изометрическая проекция. Х - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на 180 пикселей, по оси Z - на 70 пикселей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 110о против часовой стрелки.

9) Косоугольная горизонтальная изометрическая проекция. ││- образная фигура ис-ходно находится в плоскости XY, а затем сдвигается по оси X на 150 пикселей, а по оси Y на -130 пикселей, поворачиваясь вокруг оси Y на 50о против часовой, вокруг оси X на 40о по часовой стрелке.

10) Косоугольная фронтальная диметрическая проекция. ││ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси X на 90, по оси Z - на -70 пикселей, поворачиваясь вокруг оси Y на 30о, вокруг оси Z на 110о против часовой стрелки.

11) Прямоугольная изометрическая проекция. ─┼─ - образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на -70 пикселей, оси Y - на 80 пикселей и поворачивается вокруг оси Z на 50о, оси X - на 100о по часовой стрелке.

12) Прямоугольная диметрическая проекция. ─┼─ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на -60 пикселей, по оси Z - на 120 пик-селей и поворачивается вокруг оси Y на 90о по часовой стрелке, вокруг оси X на 80о против часовой стрелки.

13) Косоугольная фронтальная изометрическая проекция. ┌── - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на 180 пикселей, по оси Z - на -40 пикселей, поворачиваясь вокруг оси Z на 70о по часовой, а вокруг оси Y на 100о против часовой стрелки.

14) Косоугольная горизонтальная изометрическая проекция. ┌── -образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на 150 пикселей, а по оси Y на -40 пикселей, поворачиваясь вокруг оси Y на 20о против часовой, вокруг оси X на 40о по часовой стрелке.

15) Косоугольная фронтальная диметрическая проекция. ─┬─ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси X на 40, по оси Z - на 140 пикселей, поворачиваясь вокруг оси Y на 40о, вокруг оси Z на 150о против часовой стрелки.

16) Прямоугольная изометрическая проекция. ─┬─ - образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на 40 пикселей, оси Y - на -90 пикселей и поворачивается вокруг оси Z на 50о, оси X - на 100о по часовой стрелке.

17) Прямоугольная диметрическая проекция. Х - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси Y на 130 пикселей, по оси Z - на -70 пикселей и поворачивается вокруг оси Y на 45о по часовой стрелке, вокруг оси X на 90о против часовой стрелки.

18) Косоугольная фронтальная изометрическая проекция. Х - образная фигура исходно находится в плоскости YZ, а затем сдвигается по оси Y на -80 пикселей, по оси Z - на 120 пикселей, поворачиваясь вокруг оси Z на 90о по часовой, а вокруг оси Y на 120о против часовой стрелки.

19) Косоугольная горизонтальная изометрическая проекция. ││ - образная фигура исходно находится в плоскости XY, а затем сдвигается по оси X на -80 пикселей, а по оси Y на -110 пикселей, поворачиваясь вокруг оси Y на 70о против часовой, вокруг оси X на 70о по часовой стрелке.

20) Косоугольная фронтальная диметрическая проекция. ││ - образная фигура исходно находится в плоскости XZ, а затем сдвигается по оси X на 80, по оси Z - на -50 пикселей, поворачиваясь вокруг оси Y на 60о, вокруг оси Z на 140о против часовой стрелки.

Контрольные вопросы

- Какие геометрические преобразования называются аффинными?

- Какие существуют виды геометрического преобразования?

- Каким квадрантом прямоугольной системы координат представлен экран дисплея по умолчанию?

- Для чего используется при геометрических построениях процедура языка Паскаль GetAspectRatio?

- Можно ли совместить при геометрическом преобразовании сдвиг и масштабирование?

- Можно ли получить динамическое изображение на основе одной графической страницы?

- Можно ли совместить при движении три вида преобразования: сдвиг, поворот и масштабирование?

- Чему равен минимальный дискрет перемещения изображения по осям X и Y?

- Чем определяется скорость перемещения изображения по экрану?

- Какие варианты задания допускают однократное построение координатных осей?

- Изменится ли результат трехмерных преобразований если поменять местами сдвиг и поворот?

- Какие существуют виды трехмерных проекций?

- Почему промежуточные координаты преобразуемого изображения в программе примера определены как переменные типа real, а конечные - типа integer?

- Какое разрешение экрана не требует введения масштабирующих коэффициентов?

- Почему при отображении трехмерной прямоугольной системы координат на плоскости расчет координаты Х двумерной системы не учитывает значение координаты Z трехмерной системы?





Дата публикования: 2015-02-20; Прочитано: 526 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.017 с)...