Помощь - Поиск - Пользователи - Календарь
Полная версия: Вращение обьекта
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анна
Вот код, почему-то перерисовывает как попало.

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.



renesko1
А что имено должно происходить на экране ?(подробно)
Я вижу белый квадрат.
Анна
Перерисовка картинки. В данном случае относительно ОХ.
Вектор перемножаем на матрицу в результате чего получаются новые координаты фигуры.
renesko1
Я не очень понял задание, но попробуй поставить
procedure vect_matr(VAR vect:vector;VAR matr:matrix);
вместо того что у тебя.
Те ты передаешь так по адресу и изменяешь входные папраметры.


Добавлено через 5 мин.
А как звучало задание ?
volvo
Цитата
matrixX[2,2]:=round(cos(90));
и ему подобные лучше все-таки записывать правильно, в радианах...
andriano
Аня, глубоко не копал, но хочу напомнить, что при обращении к тригономерическим функциям аргумент задается в радианах, а не градусах.
Вообще же координаты во всех случаях кроме экранных (пиксельных) принято записывать в числах с плавающей точкой.
Еще: ты несколько раз суммируешь в vect_5, ни нигде его не очищаешь.
Анна
Задание просто заставить фигуру вращаться вокруг осей путем перемножения вектора на матрицу.
А где именно обнулять 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.



Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.