IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Реализовать программу, строящую двумерное изображение заданной фигуры.
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Реализовать программу, строящую двумерное изображение заданной фигуры. Необходимо выполнить 2D преобразования и отобразить новое положение фигуры.


Эскизы прикрепленных изображений
Прикрепленное изображение
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 21
Пол: Мужской

Репутация: -  0  +


Вот, мб кому пригодится!
Program Zadanie_2; {Имя программы}
uses graph; {Команда подключения модулей}
function arccos(r:real):real; {Так как в языке pascal отсутствует оператор arccos, создадим функцию нахождения arccos через arctan. Данная функция потребуется для определения начального угла поворота относительно новой системы координат}
begin
if r=0 {Если переменная r равна нулю, то переходим к выполнению оператора после then, иначе выполняем оператор после else}
then
arccos:=pi/2 {Присваиваем функции arсcos значение pi/2, где pi – число пи. Расчет ведем в радианах}
else
arccos:=arctan(sqrt(1-sqr®)/r)+pi*byte(r<0) {Находим значение функции arcos через arctan}
end;
procedure Figura(x11,y11,x111,y111,d,m,u,c:integer);
{Процедура построения фигуры с параметрами: x11,y11 – координаты осей для новой системы координат, x111,y111- координаты центра построения фигуры относительно новой системы координат
, d – радиус фигуры, m – отношение радиуса d к радиусу d1, u – угол сдвига фигуры относительно начала новой системы координат, c – цвет фигуры, для наглядности преобразований}
var {Секция описания переменных}
i,d1,a,x1,y1:integer; {Переменные целого типа, где i – порядковый номер точки, d1- радиус каждой второй точки, х1,y1 – координаты центра фигуры относительно начальной системы координат}
l,f:real;{Переменные вещественного типа, где l – расстояние от начала новой системы координат до центра фигуры, f – угол между осью x` и отрезком l, т.е. начальный угол на котором расположен центр фигуры относительно начала новой системы координат}
p:array[1..9] of pointtype; {Массив из 9 элементов имеющих тип точка}
begin
d1:=d div m;{Переменной d1 присвоить значение d деленного на m без остатка, т.е. находим радиус для каждой второй точки через радиус фигуры поделенного на заданное значение m}
a:=u;{Присваиваем вспомогательной переменной a значение u (угол сдвига фигуры относительно начала новой системы координат)}
// Находим координаты центра фигуры относительно начальной системы координат, переменным x1,y1 присваиваем найденные значения
x1:=x11+x111;
y1:=y11-y111;
// Находим расстояние от начала новой системы координат до центра фигуры
l:=(x111)/sqrt(sqr(x111)+sqr(y111));
// Находим угол между осью х` и отрезком l
f:=arccos(l);
//Находим центр построения фигуры относительно начальной системы координат, с учетом угла сдвига фигуры относительно начала новой системы координат
x1:=round(x11+sqrt(sqr(x111)+sqr(y111))*cos(u*pi/180+f));
//Следующая операция необходима для правильного нахождения центра фигуры относительно новой системы координат при отрицательных значениях y111
if (y111>=0) {Если переменная y111>=0 то переходим к выполнению оператора после then, иначе выполняем оператор после else}
then
//Находим значение координаты центра фигуры по оси y` при положительной переменной y111
y1:=round(y11-sqrt(sqr(x111)+sqr(y111))*sin(u*pi/180+f))
else
//Находим значение координаты центра фигуры по оси y` при отрицательной переменной y111
y1:=round(y11+sqrt(sqr(x111)+sqr(y111))*sin(u*pi/180+f));
for i:=1 to 8 do {Для всех i от 1 до 8 выполняем оператор после do}
//Находим координаты точек для построения фигуры с учетом того, что точка, имеющая четный порядковый номер должна находится на расстоянии d1 от цетра фигуры
begin
if i mod 2=0 then {Если при делении количества точек остаток равен нулю, то выполняем оператор после then, иначе выполняем оператор после else}
begin
p[i].x:=x1+round(d1*cos(a*pi/180));
p[i].y:=y1-round(d1*sin(a*pi/180));
end
else
begin
p[i].x:=x1+round(d*cos(a*pi/180));
p[i].y:=y1-round(d*sin(a*pi/180));
end;
a:=a+45; {Т.к. точки построения фигуры находятся под углом 45 градусов к друг другу, в конце каждого цикла увеличиваем угол на 45 градусов}
end;
//Присваиваем координаты последней точки девятому элементу массива, это необходимо для замыкания фигуры.
p[9].x:=p[1].x;
p[9].y:=p[1].y;
SetColor©; {задаем цвет линий фигуры}
drawpoly(9,p); {Строим фигуру, т.е. последовательно соединяем все наши точки отрезками}
end;
var
gd,gm,xc,yc:integer;
begin
gd:=0; {Тип драйвера адаптера определяется автоматически, значение gm после команды gd:=detect или gd:=0 определяется автоматически}
initgraph(gd,gm,''); {Инициализация графики. В кавычках указывается путь к программе драйверу с расширением bgi, т.к. мы используем FreePascal у нас нет необходимости указывать путь к дополнительным драйверам, т.к. он в них не нуждается}
//Определяем разрешающую способность для текущего графического режима функциями, возвращающими максимальные значения координат экрана
xc:=getmaxX div 2;
yc:=getmaxY div 2;
//Рисуем по центру экрана экран линии, т.е. оси соответствующие новым системам координат
line(0,yc,getmaxX,yc);
line(xc,0,xc,getmaxY);
//Выводим на экран надпись 'Press Enter', для информативности
outtextXY(xc+100,50,'Press Enter');
// С помощью процедуры Figura строим требуемую фигуру.
Figura(xc,yc,100,100,80,3,0,15); {Начальное положение фигуры}
readln;
Figura(xc,yc,100,100,80,3,45,10); {Поворачиваем фигуру относительно центра новой системы координат на 45 градусов}
readln;
Figura(xc,yc,100,-100,80,3,45,5);{Отражение относительно оси х`}
readln
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
GrukhvinEV   Реализовать программу, строящую двумерное изображение заданной фигуры.   15.12.2011 14:25
TarasBer   Задаёшь массив из 8 точек. Для поворота на 45 град…   15.12.2011 14:33
GrukhvinEV   Задаёшь массив из 8 точек. Для поворота на 45 гра…   18.12.2011 11:04
GrukhvinEV   Спасибо! Да мне бы всю картину решения задачи …   15.12.2011 14:57
TarasBer   uses Graph; var gd,gm: integer; begin gd:=0; …   15.12.2011 16:11
GrukhvinEV   Угу вот за это спасибо! Щас время нет, но завт…   15.12.2011 16:18
IUnknown   Да, при использовании FPC это нормально. Его модул…   15.12.2011 16:53
GrukhvinEV   Спасибо. Посдскажите пожалуйста изменить положение…   16.12.2011 14:03
TarasBer   x переводишь в GetMaxX div 2+x y переводишь в GetM…   16.12.2011 14:17
GrukhvinEV   Наверно даже надо писать за место y GetMaxY/2-y, а…   16.12.2011 14:22
TarasBer   > Наверно даже надо писать за место y GetMaxY/2…   16.12.2011 14:40
GrukhvinEV   А точно, извини просто уже крыша едет от pascala =…   16.12.2011 16:15
TarasBer   Да не, всё чётко. Кроме того, что вместо t:=0; wh…   16.12.2011 18:03
IUnknown   Есть, DrawPoly называется, в справке есть пример е…   16.12.2011 18:41
GrukhvinEV   Вот, мб кому пригодится! Program Zadanie_2; {И…   19.12.2011 10:46
TarasBer   > Ошибка тут, верно будет вот так: > x_нов :…   19.12.2011 13:39


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 26.12.2025 22:09
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name