procedure XYZ(X,Y,Z : double; Var X2,Y2 : double);
begin
X2:=Round(X*Focus/100+(Form1.PaintBox1.Width div 2));
Y2:=Round(Y*Focus/100+(Form1.PaintBox1.Height div 2));
end;
procedure Pw(var X,Y : double; Al : double);
Var
X2, Y2 : double;
sina, cosa : double;
begin
if Al=0 then Exit;
sina :=sin(Al); cosa:=cos(Al);
X2:=(X*cosa-Y*Sina-pi);
Y2:=(X*Sina+Y*Cosa-pi);
X:=X2; Y:=Y2;
end;
procedure Draw;
Var
J, I, C : integer;
TT : TMain;
begin
TT:=Points;
for I:=1 to MaxPoints do begin
Pw(TT[i].X, TT[i].Y, dxy);
Pw(TT[i].X, TT[i].Z, dxz);
Pw(TT[i].Y, TT[i].Z, dyz);
XYZ(TT[i].X, TT[i].Y, TT[i].Z, TT[i].X, TT[i].Y);
end;
LinesCount:=0;
for I:=1 to MaxPoints do
for j:=1 to 3 do if TT[i].Sd[J]<>0 then begin
C:=TT[i].Sd[j];
inc(LinesCount);
with Lines[LinesCount] do begin
X1:=round(TT[i].X); Y1:=round(TT[i].Y);
X2:=round(TT[C].X); Y2:=round(TT[C].Y);
end;
end;
end;
procedure TForm1.PaintBox1Paint(Sender: TObject);
var i : integer;
begin
Draw;
PaintBox1.canvas.FillRect(PaintBox1.canvas.ClipRect);
with PaintBox1.canvas do
for i:=1 to LinesCount do begin
MoveTo(Lines[i].X1, Lines[i].Y1);
LineTo(Lines[i].X2, Lines[i].Y2);
Label2.Caption:='XY='+FloatToStr(dxy);
Label3.Caption:='XZ='+FloatToStr(dxz);
Label4.Caption:='YZ='+FloatToStr(dyz);
Label5.Caption:='Focus='+inttostr(Focus);
end;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
begin
dxy:=dxy+sxy;
dxz:=dxz+sxz;
dyz:=dyz+syz;
PaintBox1.Repaint;
end;
procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char);
begin
if key='1' then begin
dxy:=dxy-0.05;
PaintBox1.Repaint;
end;
if key='3' then begin
dxy:=dxy+0.05;
PaintBox1.Repaint;
end;
if key='4' then begin
dxz:=dxz-0.05;
PaintBox1.Repaint;
end;
if key='6' then begin
dxz:=dxz+0.05;
PaintBox1.Repaint;
end;
if key='2' then begin
dyz:=dyz+0.05;
PaintBox1.Repaint;
end;
if key='8' then begin
dyz:=dyz-0.05;
PaintBox1.Repaint;
end;
if key='7' then begin
Focus:=Focus-n;
Label1.Caption:='N='+ inttostr(n);
PaintBox1.Repaint;
end;
if key='9' then begin
Focus:=Focus+n;
Label1.Caption:='N='+inttostr(n);
PaintBox1.Repaint;
end;
if key='5' then begin
Focus:=1000;
DXY:=10;
DXZ:=100;
DYZ:=1000;
sxy:=0.02;
Label9.Caption:='Speed=0,02';
Timer1.Enabled:=False;
N:=30;
Label1.Caption:='N=30';
Label6.Caption:='Random Rotate=False';
Paintbox1.Left:=54;
Paintbox1.Top:=39;
Paintbox1.Repaint;
Label7.Caption:='Position=' + inttostr(Paintbox1.Left) + ',' + inttostr(Paintbox1.Top);
end;
if (key='w') or (key='W') or (key='ц') or (key='Ц') then begin
Paintbox1.Top:=Paintbox1.Top-n;
Label7.Caption:='Position=' + inttostr(Paintbox1.Left) + ',' + inttostr(Paintbox1.Top);
end;
if (key='a') or (key='A') or (key='ф') or (key='Ф') then begin
Paintbox1.Left:=Paintbox1.Left-n;
Label7.Caption:='Position=' + inttostr(Paintbox1.Left) + ',' + inttostr(Paintbox1.Top);
end;
if (key='d') or (key='D') or (key='в') or (key='В') then begin
Paintbox1.Left:=Paintbox1.Left+n;
Label7.Caption:='Position=' + inttostr(Paintbox1.Left) + ',' + inttostr(Paintbox1.Top);
end;
if (key='s') or (key='S') or (key='ы') or (key='Ы') then begin
Paintbox1.Top:=Paintbox1.Top+n;
Label7.Caption:='Position=' + inttostr(Paintbox1.Left) + ',' + inttostr(Paintbox1.Top);
end;
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if key=vk_Escape then Application.Terminate;
if key=vk_Left then begin
sxy:=sxy - 0.01;
Label9.Caption:='Speed=' + floattostr(sxy);
end;
if key=vk_right then begin
sxy:=sxy + 0.01;
Label9.Caption:='Speed=' + floattostr(sxy);
end;
if key=vk_F1 then begin
Application.MessageBox(
' Created by PaPa_CaRLO аля Михаил и San40 аля Александр Кутаков' + #13 +
'---------------------------------------------------------------------------------------' + #13 +
' Управление: ' + #13 +
'---------------------------------------------------------------------------------------' + #13 +
'>Доп. 4, 6 - Вращать куб по оси X' + #13 +
'>Доп. 2, 8 - Вращать куб по оси Y' + #13 +
'>Доп. 1, 3 - Вращать куб по оси Z' + #13 +
'>Доп. 7 - Удалить куб' + #13 +
'>Доп. 7 - Удалить куб' + #13 +
'>Доп. 5 - Вернуть стандартные значения' + #13 +
'>Пробел - Автоматически вращать куб' + #13 +
'>A, D - Изменить положение куба по оси X' + #13 +
'>W, S - Изменить положение куба по оси Y' + #13 +
'>Стрелка вверх - Увеличить значение N на 1' + #13 +
'>Стрелка вниз - Уменшить значение N на 1' + #13 +
'>Стрелка влево - Уменшить значение Speed на 0,01' + #13 +
'>Стрелка вправо - Увеличить значение Speed на 0,01' + #13 +
'>Escape - Выход из программы' + #13 +
'>F1 - Помощь',
' <<<Информация>>>',
MB_OK or MB_ICONINFORMATION or MB_DEFBUTTON3);
end;
if key=vk_Up then begin
n:=n+1;
Label1.Caption:='N='+inttostr(n);
end;
if key=vk_Down then begin
n:=n-1;
Label1.Caption:='N='+inttostr(n);
end;
if key=vk_space then begin
Timer1.Enabled:=not Timer1.Enabled;
if timer1.Enabled=true then
Label6.Caption:='Random Rotate=True' else
Label6.Caption:='Random Rotate=False'
end;
Member
Статус: Не в сети Регистрация: 30.01.2004 Откуда: Пенза
Цитата:
А есть ли в Делфи 7 аналог модуля Graph, который был в Turbo Pascal? Если есть то как его врубить, описать и как пользоваться?
Я не видел Turbo Pascal, но в дельфях есть компонент TChart для вывода всяких графиков и диаграмм, а также к вашим услугам GDI (GDI+ в win xp), а также DirectX и Direct3D
_________________ Abit AI-7/P4-2.26@3.4/Zalman7000A-Cu/1Gb Transcend PC3200/Leadtek GF 6800 (CPU400/DDR860)/Samsung 193P
Member #155 of http://www.ISDEF.org
Advanced member
Статус: Не в сети Регистрация: 09.06.2003 Откуда: USSR
Xaker Ты не путай ДОС и Windows, последний уже графика и чегото еще ему не надо.
Для того чтобы рисовать ты должен просто работать с обьектом TCanvas, Такой есть почти у всех визуальных компонентов. А уже использя его ты можеш и линии рисовать и картинки лепить, короче всю работу с графикой. TCanvas это просто оболочка для выхова GDI функция самой Windows. Советую почитать хелпец
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения