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

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

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

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


Новичок
*

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

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


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


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


Злостный любитель
*****

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

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


Задаёшь массив из 8 точек.
Для поворота на 45 градусов для каждой точки делаешь так:

x_нов := (x+y)/sqrt(2)
y_нов := (x-y)/(sqrt(2)

Для относительно оси икс заменяешь все x на -x


--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Новичок
*

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

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


Цитата(TarasBer @ 15.12.2011 13:33) *

Задаёшь массив из 8 точек.
Для поворота на 45 градусов для каждой точки делаешь так:

x_нов := (x+y)/sqrt(2)
y_нов := (x-y)/(sqrt(2)

Для относительно оси икс заменяешь все x на -x

Ошибка тут, верно будет вот так:
x_нов := (x-y)/sqrt(2)
y_нов := (x+y)/(sqrt(2)
И относительно оси икс надо менять y на -y

Добавлено через 4 мин.
Вот написал я программу дня за 3 )))) Зато сколько возможностей )))
Program Zadanie_2;
uses graph;
function arccos(r:real):real;
begin
if r=0 then arccos:=pi/2
else arccos:=arctan(sqrt(1-sqr®)/r)+pi*byte(r<0)
end;
procedure Figura(x11,y11,x111,y111,d,m,u,c:integer);
{x11,y11 - Є®®а¤Ё­ вл 業ва  ­®ўле ®бҐ©, x111,y111-Є®®а¤Ё­ вл 業ва  дЁЈгал
®в­®бЁвҐ«м­®Ј® ­®ў®Ј® 業ва  ®бҐ©, d - а ¤Ёгб дЁЈгал, m - ¤Ґ«ЁвҐ«м а ¤Ёгб 
дЁЈгал зҐаҐ§ Є ¦¤лҐ 90 Ја ¤гб®ў,u - гЈ®« Ї®ў®а®в  ®в­®бЁвҐ«м­® ­®ў®© ®бЁ,
c - 梥в дЁЈгал}
var
i,d1,a,x1,y1:integer;
l,f:real;
p:array[1..9] of pointtype;
begin
d1:=d div m;
a:=u;
x1:=x11+x111;
y1:=y11-y111;
//write(y11,' ',y1);
l:=(x111)/sqrt(sqr(x111)+sqr(y111));
f:=arccos(l);
x1:=round(x11+sqrt(sqr(x111)+sqr(y111))*cos(u*pi/180+f));
if (y111>=0) then
y1:=round(y11-sqrt(sqr(x111)+sqr(y111))*sin(u*pi/180+f))
else
y1:=round(y11+sqrt(sqr(x111)+sqr(y111))*sin(u*pi/180+f));
for i:=1 to 8 do
begin
if i mod 2=0 then
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;
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;
initgraph(gd,gm,'');
xc:=getmaxX div 2;
yc:=getmaxY div 2;
line(0,yc,getmaxX,yc);
line(xc,0,xc,getmaxY);
outtextXY(xc+100,50,'Press Enter');
Figura(xc,yc,100,100,80,3,0,15);
readln;
Figura(xc,yc,100,100,80,3,45,10);
readln;
Figura(xc,yc,100,-100,80,3,45,5);
readln
end.



Сообщение отредактировано: GrukhvinEV -
 Оффлайн  Профиль  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

 





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