Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
В прямоугольной изометрической проекции нарисовать две параллельные линии, лежащие на плоскости 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!