Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Теория программирования > Алгоритмы
Перезагрузить страницу Вращение куба.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Solni Solni вне форума
Новичок
 
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 23.12.2011
По умолчанию Вращение куба. - 23.12.2011, 12:00

Здравствуйте, мне нужно написать программу вращения куба вокруг оси. куб должен проецироваться изометрически. проблема в том, что проекция точек у меня обратная необходимому виду( то есть куб вращается вокруг переднего ребра). вот программа.
unit Unit3;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls, Menus, XPMAN;

type
TForm1 = class(TForm)
Button2: TButton;
Image1: TImage;
Button1: TButton;
Timer1: TTimer;
Button3: TButton;
Button4: TButton;
Button5: TButton;
Button6: TButton;
Button7: TButton;
Button8: TButton;
Timer2: TTimer;
Timer3: TTimer;
Timer4: TTimer;
Timer5: TTimer;
Button10: TButton;
MainMenu1: TMainMenu;
N1: TMenuItem;
N2: TMenuItem;
OY1: TMenuItem;
OZ1: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
Timer6: TTimer;
Timer7: TTimer;
Button11: TButton;
Button12: TButton;


procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Button7Click(Sender: TObject);
procedure Button8Click(Sender: TObject);
procedure Timer2Timer(Sender: TObject);
procedure Timer3Timer(Sender: TObject);
procedure Timer4Timer(Sender: TObject);
procedure Button10Click(Sender: TObject);
procedure OZ1Click(Sender: TObject);
procedure OY1Click(Sender: TObject);
procedure Timer6Timer(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure Timer7Timer(Sender: TObject);
procedure Button11Click(Sender: TObject);
procedure Button12Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
a,h,b: integer;
k: real;
x: array [1..65] of real;
y: array [1..65] of real;
z: array [1..65] of real;
x1: array [1..65] of integer;
y1: array [1..65] of integer;


const
alfa=45;
f=1/2;
t=24.1;
l=35.26;

implementation

{$R *.dfm}


procedure kub(a: integer);
var
osn: array [1..22] of TPoint;
ptc: array [0..1] of integer;
centr_x, centr_y: integer;
begin
centr_x:=(Form1.Image1.Width div 2)-0; //точки положения куба
centr_y:=(Form1.Image1.Height div 2)-0;
//
with Form1.Image1.Canvas do
begin
osn[1].x:=centr_x+x1[50];
osn[1].y:=centr_y-y1[1];
osn[2].x:=centr_x+x1[2];
osn[2].y:=centr_y-y1[2];
osn[3].x:=centr_x+x1[3];
osn[3].y:=centr_y-y1[3];
osn[4].x:=centr_x+x1[4];
osn[4].y:=centr_y-y1[4];
osn[5].x:=centr_x+x1[8];
osn[5].y:=centr_y-y1[8];
osn[6].x:=centr_x+x1[7];
osn[6].y:=centr_y-y1[7];
osn[7].x:=centr_x+x1[3];
osn[7].y:=centr_y-y1[3];
osn[8].x:=centr_x+x1[2];
osn[8].y:=centr_y-y1[2];
osn[9].x:=centr_x+x1[6];
osn[9].y:=centr_y-y1[6];
osn[10].x:=centr_x+x1[7];
osn[10].y:=centr_y-y1[7];
osn[11].x:=centr_x+x1[8];
osn[11].y:=centr_y-y1[8];
osn[12].x:=centr_x+x1[5];
osn[12].y:=centr_y-y1[5];
osn[13].x:=centr_x+x1[6];
osn[13].y:=centr_y-y1[6];
osn[14].x:=centr_x+x1[2];
osn[14].y:=centr_y-y1[2];
osn[15].x:=centr_x+x1[1];
osn[15].y:=centr_y-y1[1];
osn[16].x:=centr_x+x1[5];
osn[16].y:=centr_y-y1[5];
osn[17].x:=centr_x+x1[8];
osn[17].y:=centr_y-y1[8];
osn[18].x:=centr_x+x1[4];
osn[18].y:=centr_y-y1[4];
osn[19].x:=centr_x+x1[1];
osn[19].y:=centr_y-y1[1];
//
ptc[0]:=19;
PolyPolygon(Form1.Image1.Canvas.Handle,osn,ptc,1);
end;
end;

procedure proekcia(x,y,z: real; var x1,y1: integer);
begin
x1:=Round(x*cos(alfa)-z*sin(alfa));
y1:=Round(y*cos(l)-z*sin(t)-x*sin(t));
end;

procedure povoroty(x,y: real;var fi: real; var x22,y22: real);
begin
x22:=x*cos(fi)-y*sin(fi);
y22:=y*cos(fi)+x*sin(fi);
end;

procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin

k:=0;
with Image1.Canvas do
begin
Pen.Color:=clRed; //цвет куба
Rectangle(0,0,1400,1400); //малая цифра - шлейф
end;
// Кубик
x[1]:=0;
y[1]:=0;
z[1]:=0;

x[2]:=0;
y[2]:=0;
z[2]:=100;

x[3]:=0;
y[3]:=100;
z[3]:=100;

x[4]:=0;
y[4]:=100;
z[4]:=0;
//
x[5]:=100;
y[5]:=0;
z[5]:=0;

x[6]:=100;
y[6]:=0;
z[6]:=100;

x[7]:=100;
y[7]:=100;
z[7]:=100;

x[8]:=100;
y[8]:=100;
z[8]:=0;

k:=0;
for i:=1 to 8 do // построение проекции фигуры
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
kub(a);

Timer1.Enabled:=false;
Timer2.Enabled:=false;
Timer3.Enabled:=false;
Timer4.Enabled:=false;
Timer6.Enabled:=false;
Timer7.Enabled:=false;

end;

procedure TForm1.FormCreate(Sender: TObject);
begin
Image1.Canvas.Brush.Color:=clBlack; //цвет фона
Image1.Canvas.Rectangle(0,0,1400,1400); //малая цифра - шлейф
Button2.Click;
end;


procedure TForm1.Button1Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 65 do
begin
povoroty(x[i],y[i],k,x2,y2);
x[i]:=x2;
y[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
Button1.Click;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;

procedure TForm1.Button4Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=-0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 65 do
begin
povoroty(x[i],y[i],k,x2,y2);
x[i]:=x2;
y[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;
end;

procedure TForm1.Button5Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 65 do
begin
povoroty(y[i],z[i],k,x2,y2);
y[i]:=x2;
z[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;
end;

procedure TForm1.Button6Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=-0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 60 do
begin
povoroty(y[i],z[i],k,x2,y2);
y[i]:=x2;
z[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;
end;

procedure TForm1.Button7Click(Sender: TObject);
var
i: integer;
x2,y2: real;
begin
k:=0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 65 do
begin
povoroty(z[i],x[i],k,x2,y2);
z[i]:=x2;
x[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;
end;

procedure TForm1.Button8Click(Sender: TObject);

var
i: integer;
x2,y2: real;
begin
k:=-0.1;
with Image1.Canvas do
begin
Rectangle(0,0,1400,1400); //малая цифра - шлейф
for i:=1 to 65 do
begin
povoroty(z[i],x[i],k,x2,y2);
z[i]:=x2;
x[i]:=y2;
proekcia(x[i],y[i],z[i],x1[i],y1[i]);
end;
kub(a);
end;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Button5.Click;
end;

procedure TForm1.Timer3Timer(Sender: TObject);
begin
Button7.Click;
end;

procedure TForm1.Timer4Timer(Sender: TObject);
var
ch: integer;
begin
ch:=Random(5)+1;
case ch of
1:
begin
Timer1.Enabled:=true;
Timer2.Enabled:=false;
Timer3.Enabled:=false;
Timer6.Enabled:=false;
Timer7.Enabled:=false;
end;
2:
begin
Timer1.Enabled:=false;
Timer2.Enabled:=true;
Timer3.Enabled:=false;
Timer6.Enabled:=false;
Timer7.Enabled:=false;
end;
3:
begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Timer3.Enabled:=true;
Timer6.Enabled:=false;
Timer7.Enabled:=false;
end;
4:
begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Timer3.Enabled:=false;
Timer6.Enabled:=true;
Timer7.Enabled:=false;
end;
5:
begin
Timer1.Enabled:=false;
Timer2.Enabled:=false;
Timer3.Enabled:=false;
Timer6.Enabled:=false;
Timer7.Enabled:=true;
end;
end;
end;




procedure TForm1.Button10Click(Sender: TObject);
begin
close;
end;



procedure TForm1.OZ1Click(Sender: TObject);
begin
Timer1.Enabled:=true;
end;

procedure TForm1.OY1Click(Sender: TObject);
begin
Timer6.Enabled:=true;
end;

procedure TForm1.Timer6Timer(Sender: TObject);
begin
Button7.Click;
end;

procedure TForm1.N2Click(Sender: TObject);
begin
Timer7.Enabled:=true;
end;

procedure TForm1.Timer7Timer(Sender: TObject);
begin
Button5.Click;
end;

procedure TForm1.Button11Click(Sender: TObject);
begin
Timer6.Enabled:=true;
end;

procedure TForm1.Button12Click(Sender: TObject);
begin
Timer7.Enabled:=true;
end;

end.
заранее благодарю ха помощь.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
постоянное вращение шпиндельного двигателя саша_karp_off Электроника 13 07.06.2010 17:20
Вращение объекта как делать Simeon Программирование графики 5 08.07.2008 16:05
ХЕЛП! Вращение куба! Очень срочно! DOVE Pascal 13 07.02.2007 15:44
Как сделать вращение IMAGE Denny .NET 0 09.04.2006 22:48
Как сделать поворот куба при помощи MFC в С++ Dedu Вопросы начинающих программистов 4 15.11.2005 00:28
Для двух заданных вершин n-мерного куба... Lewka Prolog 0 18.06.2005 18:37
Вращение колесика мыши в GLUT Amo Программирование графики 0 13.03.2005 13:26
Поворот куба как реализовать Maksimus Lisp 4 03.02.2005 19:34
Вращение мышью 3-D объекты в Delphi 7 Anonymous Вопросы начинающих программистов 0 12.06.2004 14:15
Построить гамильтонов граф для каркаса n-мерного куба Фумска Pascal 0 03.06.2004 14:37
Вращение куба с выбором точки просмотра odin_gremlin Алгоритмы 3 03.06.2004 01:54
Вращение объекта на Open GL Anonymous Программирование графики 3 23.11.2003 11:00



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов