Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для Grek!
64 / 64 / 57
Регистрация: 13.04.2010
Сообщений: 150

Растяжение фигуры по оси Y

04.11.2012, 08:49. Показов 1812. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!

Необходимо реализовать программу, строящую двумерное изображение заданной фигуры. Необходимо выполнить 2D преобразования и отобразить новое положение фигуры. Растянуть вдоль оси Y и поворот на 90° относительно начала координат
Координаты вершин объектов сцены задаются самостоятельно.
Рисунок во вложении.

Моя программа рисует фигуру и поворачивает ее на 90 градусов. Но растяжение сделать не получается. Подскажите пожалуйста как это можно реализовать.

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
Uses Graph, crt;
Var
Gd, Gm : Integer;
figura : Array [1..21] Of PointType;
i,n:integer;
 
Begin
figura[1].X:=150; figura[1].Y:=200;
figura[2].X:=50; figura[2].Y:=250;
figura[3].X:=150; figura[3].Y:=300;
figura[4].X:=250; figura[4].Y:=250;
figura[5].X:=150; figura[5].Y:=200;
figura[6].X:=130; figura[6].Y:=210;
figura[7].X:=70; figura[7].Y:=210;
figura[8].X:=70; figura[8].Y:=240;
figura[9].X:=50; figura[9].Y:=250;
figura[10].X:=70; figura[10].Y:=260;
figura[11].X:=70; figura[11].Y:=290;
figura[12].X:=130; figura[12].Y:=290;
figura[13].X:=150; figura[13].Y:=300;
figura[14].X:=170; figura[14].Y:=290;
figura[15].X:=230; figura[15].Y:=290;
figura[16].X:=230; figura[16].Y:=260;
figura[17].X:=250; figura[17].Y:=250;
figura[18].X:=230; figura[18].Y:=240;
figura[19].X:=230; figura[19].Y:=210;
figura[20].X:=170; figura[20].Y:=210;
figura[21].X:=150; figura[21].Y:=200;
Gd:=Detect;
InitGraph(Gd, Gm, '');
If GraphResult <> grOk Then Halt(1);
DrawPoly(SizeOf(figura) Div SizeOf(PointType), figura);
readln;
CloseGraph;
 
 
clrscr;
InitGraph(Gd, Gm, '');
for i:=1 to 21 do
begin
n:=figura[i].y;
figura[i].y:=figura[i].X;
figura[i].X:=n;
end;
If GraphResult <> grOk Then Halt(1);
DrawPoly(SizeOf(figura) Div SizeOf(PointType), figura);
readln;
CloseGraph;
End.
Может ее надо строить другим способом?
Изображения
 
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.11.2012, 08:49
Ответы с готовыми решениями:

Поворот фигуры вокруг оси
Здравствуйте.Снова нужна помощь.Вот отрисовал треугольник.Нужно четыре цикла repeat чтобы полностью повернуть его.Обяъясните пожалуйста...

Движение рисунков: одного по оси X, другого - по оси Y
В модуле graphabc нарисовать следущее: см. прикрепления Первый рисунок должен двигаться по оси Y, а второй по оси X- если два эти...

Как делать аффинные преобразования в пространстве: вращение, растяжение, отражение, перенос фигуры.
Помогите решить задачу на Delphi. Задача. Пользователь курсором мыши задаёт координаты появления круга на форме. При каждом новом...

5
 Аватар для zvoronz
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
04.11.2012, 08:56
Введите такую структуру как матрица 3х3. Потом почитайте о матрицах трансформации и напишите всё что вам нужно.

П.С. Используя матрицу трансформации можно будет поворачивать фигуру на любой угол.
0
 Аватар для Grek!
64 / 64 / 57
Регистрация: 13.04.2010
Сообщений: 150
04.11.2012, 08:58  [ТС]
Цитата Сообщение от zvoronz Посмотреть сообщение
Введите такую структуру как матрица 3х3. Потом почитайте о матрицах трансформации и напишите всё что вам нужно.

П.С. Используя матрицу трансформации можно будет поворачивать фигуру на любой угол.
Фигуру придется перестраивать или этот способ подойдет?
0
 Аватар для zvoronz
273 / 241 / 56
Регистрация: 29.05.2012
Сообщений: 889
04.11.2012, 09:21
Этот подойдёт.
0
 Аватар для Grek!
64 / 64 / 57
Регистрация: 13.04.2010
Сообщений: 150
04.11.2012, 10:48  [ТС]
Нашел пример с треугольником. Переделал под свои данные. Проверьте пожалуйста правильно ли всё выводится?

Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
uses graph;
const m=21;{треугольник}
      n=3;{размер матриц коэффициентов}
type mas=array[1..m] of real;
     mtr=array[1..n,1..n] of real;
var xa,ya,xb,yb:mas;
    a,r:mtr;
    xc,yc:integer;{центр экрана}
    ms:real;{масштаб для перевода реальных координат в экранные}
    i,j,k:byte;{счетчики циклов}
    s:string;{строка для вывода текста}
 
procedure Real_coor;{задание случайных координат вершин}
begin
xa[1]:=150; ya[1]:=100;
xa[2]:=50; ya[2]:=150;
xa[3]:=150; ya[3]:=200;
xa[4]:=250; ya[4]:=150;
xa[5]:=150; ya[5]:=100;
xa[6]:=130; ya[6]:=110;
xa[7]:=70; ya[7]:=110;
xa[8]:=70; ya[8]:=140;
xa[9]:=50; ya[9]:=150;
xa[10]:=70; ya[10]:=160;
xa[11]:=70; ya[11]:=190;
xa[12]:=130; ya[12]:=190;
xa[13]:=150; ya[13]:=200;
xa[14]:=170; ya[14]:=190;
xa[15]:=230; ya[15]:=190;
xa[16]:=230; ya[16]:=160;
xa[17]:=250; ya[17]:=150;
xa[18]:=230; ya[18]:=140;
xa[19]:=230; ya[19]:=110;
xa[20]:=170; ya[20]:=110;
xa[21]:=150; ya[21]:=100;
end;
 
procedure Picture(x,y:mas;c:integer);{рисование треугольника с-цвет линий}
begin
setcolor(c);
for i:=1 to m do lineto(round(x[i]), round(y[i]));
end;
 
procedure Ed; { присвоение матрице R значения единичной }
begin
for i:=1 to n do
 begin                             {  1 0 0  }
  for j:=1 to n do  r[i,j]:=0;     {  0 1 0  }
  r[i,i]:=1;                       {  0 0 1  }
 end;
end;
procedure Mult; {умножение матриц А и R:  R = B = A*R }
var b:mtr;
    z:real;
begin
for i:=1 to n do
for j:=1 to n do
 begin
  z:=0;
  for k:=1 to n do
  z:=z+a[i,k]*r[k,j];
  b[i,j]:=z
 end;
for i:=1 to n do
for j:=1 to n do
r[i,j]:=b[i,j]
end;
procedure Scale(sx,sy:real); {расчет матриц А и R для масштабирования}
begin                        {фигуры: по оси Х - умножение на sx,  по оси Y - на sy}
for i:=1 to 3 do
for j:=1 to 3 do a[i,j]:=0;   {  sx 0  0  }
a[1,1]:=sx;                   {  0  sy 0  }
a[2,2]:=sy;                   {  0  0  1  }
a[3, 3]:=1;
Mult;
end;
 
procedure New_XY;{расчет новых координат фигуры по исходным}
begin           {с использованием матрицы преобразования R}
for i:=1 to m do
 begin
  xb[i]:=xa[i]*r[1, 1]+ ya[i]*r[1, 2]+ r[1, 3];
  yb[i]:=xa[i]*r[2, 1]+ ya[i]*r[2, 2]+ r[2, 3]
 end;
 moveto(round(xb[1]), round(yb[1]))
end;
 
 
begin
randomize;
initGraph(xc,yc,'');
xc:=getmaxX div 2; yc:=getmaxY div 2; { центр экрана }
ms:=(yc-30)/20;
{нарисуем оси}
line(0,yc,getmaxX,yc);{оси}
line(xc,0,xc,getmaxY);
for i:=1 to 20 do{максимальное количество засечек в одну сторону}
if i mod 2=0 then
  begin
    line(xc-3,yc-round(i*ms),xc+3,yc-round(i*ms));{засечки на оси У}
    line(xc-3,yc+round(i*ms),xc+3,yc+round(i*ms));
    {подпись оси У}
    str(i,s);
    outtextXY(xc-20,yc-round(i*ms),s);{соответственно засечкам}
    outtextXY(xc-25,yc+round(i*ms),'-'+s);
    line(xc+round(i*ms),yc-3,xc+round(i*ms),yc+3); {засечки на оси Х}
    line(xc-round(i*ms),yc-3,xc-round(i*ms),yc+3);
    {подпись оси Х}
    outtextXY(xc+round(i*ms),yc+10,s);
    outtextXY(xc-round(i*ms),yc+10,'-'+s);
  end;
{центр}
outtextXY(xc+5,yc+10,'0');
{{подписи концов осей}
outtextXY(getmaxX-10,yc-10,'X');
outtextXY(xc+5,10, 'Y');
moveto(150,100);
Real_coor;
Picture(xa,ya,12);
setcolor(15);
outtextXY(xc+80,20,'Press Enter');
readln;
Ed;
Scale(1,2);    { растягивание по оси Y }
New_XY;
Picture(xb,yb,14);
readln
end.
0
 Аватар для Grek!
64 / 64 / 57
Регистрация: 13.04.2010
Сообщений: 150
02.12.2012, 18:08  [ТС]
Цитата Сообщение от zvoronz Посмотреть сообщение
Этот подойдёт.
В сообщении выше выложил свой код. Но думаю что это неправильно. Посмотрите пожалуйста верно ли реализовано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.12.2012, 18:08
Помогаю со студенческими работами здесь

Перенос простой фигуры к оси координат
Добрый вечер. Нужна ваша помощь! Укажите, что неправильно реализовано в коде, что лишнее, что надо дописать? Спасибо за ответы и за помощь!...

Вращение фигуры вокруг центра оси
Имеется след. класс фигуры: class Model { /// &lt;summary&gt; /// Массив рёбер /// &lt;/summary&gt; ...

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

Вращение фигуры вокруг собственной оси
Здравствуйте. На форуме нашла много подобных тем, но, к сожалению, ошибки у себя не нашла. Помогите, пожалуйста решить проблему. Фигура...

Осуществить вращение фигуры(квадрата) вокруг своей оси
Здравствуйте, пытаюсь написать алгоритм, который при зажимании мыши вращает квадрат вокруг своей оси. Почему то после полного вращения...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru