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

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

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

> Вращение фигуры в Паскале (графика)
Анисия
сообщение 28.11.2008 4:36
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 25
Пол: Женский
Реальное имя: Анисия

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


В универе дали такое задание: написать программу изображения многогранника, вращающегося вокруг осу ОУ. Фигура гексаэдр (куб).
Куб сделать сделала, а вот дальше не знаю как. Как сделать, чтобы невидно было невидимых линий. И грани рисовать закрашенными разными цветами.
program Paralel;
USES Crt, Graph;
VAR Gd, Gm: Integer;
par: array[1..8, 1..3] of real;
rebra: array[1..12, 1..2] of integer;
i: integer;
ch: char;

PROCEDURE Draw;
VAR x1,x2,y1,y2: integer;
ver1,ver2: integer;
BEGIN
For i:=1 To 12 Do Begin
ver1:=rebra[i,1];
ver2:=rebra[i,2];
x1:=round(par[ver1,1])+320;
y1:=240-round(par[ver1,2]);
x2:=round(par[ver2,1])+320;
y2:=240-round(par[ver2,2]);
line(x1,y1,x2,y2);
End;
END;

PROCEDURE VrachOX(Ugol: real);
VAR y,z: real;
BEGIN
For i:=1 To 8 Do Begin
y:=par[i,2];
z:=par[i,3];
par[i,2]:=y*cos(Ugol)-z*sin(Ugol);
par[i,3]:=y*sin(Ugol)+z*cos(Ugol);
End;
End;

PROCEDURE VrachOY(Ugol: real);
VAR x,z: real;
BEGIN
For i:=1 To 8 Do Begin
x:=par[i,1];
z:=par[i,3];
par[i,1]:=x*cos(Ugol)+z*sin(Ugol);
par[i,3]:=-x*sin(Ugol)+z*cos(Ugol);
End;
END;

PROCEDURE VrachOZ(Ugol: real);
VAR x,y: real;
BEGIN
For i:=1 To 8 Do Begin
x:=par[i,1];
y:=par[i,2];
par[i,1]:=x*cos(Ugol)-y*sin(Ugol);
par[i,2]:=x*sin(Ugol)+y*cos(Ugol);
End;
END;

BEGIN

par[1,1]:=0; par[1,2]:=0; par[1,3]:=0;
par[2,1]:=0; par[2,2]:=110; par[2,3]:=0;
par[3,1]:=175; par[3,2]:=110; par[3,3]:=0;
par[4,1]:=175; par[4,2]:=0; par[4,3]:=0;
par[5,1]:=0; par[5,2]:=0; par[5,3]:=150;
par[6,1]:=0; par[6,2]:=110; par[6,3]:=150;
par[7,1]:=175; par[7,2]:=110; par[7,3]:=150;
par[8,1]:=175; par[8,2]:=0; par[8,3]:=150;

rebra[1,1]:=1; rebra[1,2]:=2;
rebra[2,1]:=2; rebra[2,2]:=3;
rebra[3,1]:=3; rebra[3,2]:=4;
rebra[4,1]:=4; rebra[4,2]:=1;
rebra[5,1]:=5; rebra[5,2]:=6;
rebra[6,1]:=6; rebra[6,2]:=7;
rebra[7,1]:=7; rebra[7,2]:=8;
rebra[8,1]:=8; rebra[8,2]:=5;
rebra[9,1]:=1; rebra[9,2]:=5;
rebra[10,1]:=2; rebra[10,2]:=6;
rebra[11,1]:=3; rebra[11,2]:=7;
rebra[12,1]:=4; rebra[12,2]:=8;

Gd:= detect;
Initgraph(Gd, Gm, 'c:\Bp\bgi');
If GraphResult <> grOk Then
Halt(1);

SetBkColor(Black);
ClearDevice;
VrachOX(pi/12);
VrachOY(pi/12);
VrachOZ(pi/12);
While ch<>#27 Do Begin
ClearDevice;
Draw;
OuttextXY(10,450,'Press <1> for rotation');
OuttextXY(10,465,'Press <Esc> to Exit');
ch:=readkey;
Case ch Of
'1': VrachOY(pi/15);
End;
End;
CloseGraph;
END.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Ozzя
сообщение 28.11.2008 7:01
Сообщение #2


Гуру
*****

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

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


3d графика. АЗЫ для написания с нуля.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 



- Текстовая версия 20.07.2025 17:42
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"