Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

grayhex



Newbie
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

PROGRAM lab5;
uses graph,crt;
const n=8;
type v=array [1..4] of real;mat=array [1..4,1..4] of real;
matob=array [1..n] of v;
const t:matob=((200,200,200,1),(300,200,200,1),(300,300,200,1),(200,300,200,1),
(200,200,100,1),(300,200,100,1),(300,300,100,1),(200,300,100,1));
m:mat=((1,0,0,0),(0,1,0,0),(0,0,1,0),(0,0,0,1));
e:mat=((1,0,0,0),(0,1,0,0),(0.35,-0.35,0,0),(0,0,0,1));
var
mm:mat;pt:matob;i:byte;dr,reg,u:integer;smx,smy,x,y:real;
procedure draw(ot:matob;cv:byte);
var i:byte;
procedure lin(oo:matob;p,q:byte);
begin
line(trunc(oo[p,1]),trunc(oo[p,2]),trunc(oo[q,1]),trunc(oo[q,2]));
end;
begin
setcolor(cv);
for i:=1 to n div 2-1 do
lin(ot,i,i+1);
lin(ot,1,4);
for i:=n div 2+1 to n-1 do
lin(ot,i,i+1);
lin(ot,n div 2+1,n);
for i:=1 to 4 do
lin(ot,i,i+4);
end;
procedure mult(a:v;b:mat;var pv:v);
var
i,j:byte;
begin
for j:=1 to 4 do
begin
pv[j]:=0;for i:=1 to 4 do
 pv[j]:=pv[j]+a[i]*b[i,j]
 end;
 if pv[4]<>1 then
 for i:=1 to 4 do
 pv[i]:=pv[i]/pv[4]
 end;
 procedure povorot(ugol:integer);
 var p:real;
 begin
 p:=ugol*2*pi/360;
 m[2,2]:=cos(p);m[2,3]:=sin(p);m[3,2]:=-sin(p);m[3,3]:=cos(p)
 end;
 procedure sme(sx,sy,sz:real);
 begin
 for i:=1 to n do
 begin
 t[i,1]:=t[i,1]+sx;t[i,2]:=t[i,2]+sy;t[i,3]:=t[i,3]+sz
 end
 end;
 procedure mas(mx,my,mz:real);
 begin
 m[1,1]:=mx;m[2,2]:=my;m[3,3]:=mz
 end;
 begin
 dr:=detect;
 initgraph(dr,reg,'') ;
 setbkcolor(15);
 for i:=1 to n do
 mult(t[i],e,pt[i]);
 draw(pt,red);
 readln;
 repeat
 sme(-200,-300,-200);
 povorot(2);
 for i:=1 to n do
 mult(t[i],m,t[i]);
 sme(200,300,200);
 for i:=1 to n do
 mult(t[i],e,pt[i]);
 draw(pt,blue);
 delay(10000);
 cleardevice;
 until keypressed;
 closegraph;
 end.

Всего записей: 14 | Зарегистр. 26-11-2006 | Отправлено: 23:17 18-12-2006
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru