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

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

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

 
 Ответить  Открыть новую тему 
> Вращение обьекта
сообщение
Сообщение #1


Бывалая
***

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

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


Вот код, почему-то перерисовывает как попало.

uses crt,graph;
type matrix=array [1..4,1..4] of integer;
vector=array [1..4] of integer;
Point=array [1..2] of integer;
var i,j,c:integer;
matr,matr_1,matrixX:matrix;
vect_1,vect_2,vect_3,vect_4,vect_5:vector;
p1,p2,p3,p4:point;

procedure vect_matr(vect:vector;matr:matrix);
begin
for i:=1 to 4 do
begin
for j:=1 to 4 do
begin
vect_5[i]:=vect_5[i]+vect[j]*matr[i,j];
end;
end;
end;

procedure Risunok;
Var Gd,Gm:Integer;
Begin
Gd:=Detect;
InitGraph(Gd,Gm,'C:\BP\BGI');
If GraphResult <> grOk Then Halt(1);

p1[1]:=100;
p1[2]:=100;

p2[1]:=300;
p2[2]:=100;

p3[1]:=300;
p3[2]:=300;

p4[1]:=100;
p4[2]:=300;

line(p1[1],p1[2],p2[1],p2[2]);
line(p2[1],p2[2],p3[1],p3[2]);
line(p3[1],p3[2],p4[1],p4[2]);
line(p4[1],p4[2],p1[1],p1[2]);

readln;

vect_1[1]:=p1[1];
vect_1[2]:=p1[2];
vect_1[3]:=1;
vect_1[4]:=1;

vect_2[1]:=p2[1];
vect_2[2]:=p2[2];
vect_2[3]:=1;
vect_2[4]:=1;

vect_3[1]:=p3[1];
vect_3[2]:=p3[2];
vect_3[3]:=1;
vect_3[4]:=1;

vect_4[1]:=p4[1];
vect_4[2]:=p4[2];
vect_4[3]:=1;
vect_4[4]:=1;

matrixX[1,1]:=1;
matrixX[1,2]:=0;
matrixX[1,3]:=0;
matrixX[1,4]:=0;
matrixX[2,1]:=0;
matrixX[2,2]:=round(cos(90));
matrixX[2,3]:=round(sin(90));
matrixX[2,4]:=0;
matrixX[3,1]:=0;
matrixX[3,2]:=round(-sin(90));
matrixX[3,3]:=round(cos(90));
matrixX[3,4]:=0;
matrixX[4,1]:=0;
matrixX[4,2]:=0;
matrixX[4,3]:=0;
matrixX[4,4]:=1;

vect_matr(vect_1,matrixX);

p1[1]:=vect_5[1];
p1[2]:=vect_5[2];

vect_matr(vect_2,matrixX);

p2[1]:=vect_5[1];
p2[2]:=vect_5[2];

vect_matr(vect_3,matrixX);

p3[1]:=vect_5[1];
p3[2]:=vect_5[2];

vect_matr(vect_4,matrixX);

p4[1]:=vect_5[1];
p4[2]:=vect_5[2];


line(p1[1],p1[2],p2[1],p2[2]);
line(p2[1],p2[2],p3[1],p3[2]);
line(p3[1],p3[2],p4[1],p4[2]);
line(p4[1],p4[2],p1[1],p1[2]);


ReadLn;
CloseGraph;
End;


begin
risunok;
end.



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


поиск
****

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

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


А что имено должно происходить на экране ?(подробно)
Я вижу белый квадрат.


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


Бывалая
***

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

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


Перерисовка картинки. В данном случае относительно ОХ.
Вектор перемножаем на матрицу в результате чего получаются новые координаты фигуры.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


поиск
****

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

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


Я не очень понял задание, но попробуй поставить
procedure vect_matr(VAR vect:vector;VAR matr:matrix);
вместо того что у тебя.
Те ты передаешь так по адресу и изменяешь входные папраметры.


Добавлено через 5 мин.
А как звучало задание ?


--------------------
typedef void Śūnyatā ;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






Цитата
matrixX[2,2]:=round(cos(90));
и ему подобные лучше все-таки записывать правильно, в радианах...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гуру
*****

Группа: Пользователи
Сообщений: 1 168
Пол: Мужской
Реальное имя: Сергей Андрианов

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


Аня, глубоко не копал, но хочу напомнить, что при обращении к тригономерическим функциям аргумент задается в радианах, а не градусах.
Вообще же координаты во всех случаях кроме экранных (пиксельных) принято записывать в числах с плавающей точкой.
Еще: ты несколько раз суммируешь в vect_5, ни нигде его не очищаешь.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Бывалая
***

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

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


Задание просто заставить фигуру вращаться вокруг осей путем перемножения вектора на матрицу.
А где именно обнулять vect_5?

uses crt,graph;
type matrix=array [1..4,1..4] of integer;
vector=array [1..4] of integer;
Point=array [1..2] of integer;
var i,j,c:integer;
matr,matr_1,matrixX:matrix;
vect_1,vect_2,vect_3,vect_4,vect_5:vector;
p1,p2,p3,p4:point;

procedure vect_matr(var vect:vector; var matr:matrix);
begin
for i:=1 to 4 do
begin
for j:=1 to 4 do
begin
vect_5[i]:=vect_5[i]+vect[j]*matr[i,j];
end;
end;
end;

procedure Risunok;
Var Gd,Gm:Integer;
Begin
Gd:=Detect;
InitGraph(Gd,Gm,'C:\BP\BGI');
If GraphResult <> grOk Then Halt(1);

p1[1]:=100;
p1[2]:=100;

p2[1]:=300;
p2[2]:=100;

p3[1]:=300;
p3[2]:=300;

p4[1]:=100;
p4[2]:=300;

line(p1[1],p1[2],p2[1],p2[2]);
line(p2[1],p2[2],p3[1],p3[2]);
line(p3[1],p3[2],p4[1],p4[2]);
line(p4[1],p4[2],p1[1],p1[2]);

readln;

vect_1[1]:=p1[1];
vect_1[2]:=p1[2];
vect_1[3]:=1;
vect_1[4]:=1;

vect_2[1]:=p2[1];
vect_2[2]:=p2[2];
vect_2[3]:=1;
vect_2[4]:=1;

vect_3[1]:=p3[1];
vect_3[2]:=p3[2];
vect_3[3]:=1;
vect_3[4]:=1;

vect_4[1]:=p4[1];
vect_4[2]:=p4[2];
vect_4[3]:=1;
vect_4[4]:=1;

matrixX[1,1]:=1;
matrixX[1,2]:=0;
matrixX[1,3]:=0;
matrixX[1,4]:=0;
matrixX[2,1]:=0;
matrixX[2,2]:=round(cos(pi/2));
matrixX[2,3]:=round(sin(pi/2));
matrixX[2,4]:=0;
matrixX[3,1]:=0;
matrixX[3,2]:=round(-sin(pi/2));
matrixX[3,3]:=round(cos(pi/2));
matrixX[3,4]:=0;
matrixX[4,1]:=0;
matrixX[4,2]:=0;
matrixX[4,3]:=0;
matrixX[4,4]:=1;

vect_matr(vect_1,matrixX);

p1[1]:=vect_5[1];
p1[2]:=vect_5[2];

vect_matr(vect_2,matrixX);

p2[1]:=vect_5[1];
p2[2]:=vect_5[2];

vect_matr(vect_3,matrixX);

p3[1]:=vect_5[1];
p3[2]:=vect_5[2];

vect_matr(vect_4,matrixX);

p4[1]:=vect_5[1];
p4[2]:=vect_5[2];


line(p1[1],p1[2],p2[1],p2[2]);
line(p2[1],p2[2],p3[1],p3[2]);
line(p3[1],p3[2],p4[1],p4[2]);
line(p4[1],p4[2],p1[1],p1[2]);


ReadLn;
CloseGraph;
End;


begin
risunok;
end.



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

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

 





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