RSS    

   Курсовая работа: Метод наискорейшего спуска


Литература

1.  А.Я. Архангельский Программирование в Delphi 5.0. – М.: ЗАО “Издательство БИНОМ”, 2000 г.

2.  Боресков А.В., Шикин Е.В., Шикина Г.Е. Компьютерная графика: первое знакомство; Под ред. Е.В. Шикина. - М.: Финансы и статистика, 1996. - 176 с.: ил. - (Диалог с компьютером).

3.  Краснов М.В. OpenGL графика в проектах Delphi, БХВ-Санкт-Петербург, 2000. – 352 с.


Приложение А

 

Листинг программы

 

Файл Unit1.pas

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls,OpenGL, Grids, ComCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

Panel1: TPanel;

Label2: TLabel;

StringGrid1: TStringGrid;

RadioButton1: TRadioButton;

Button2: TButton;

Label3: TLabel;

Label4: TLabel;

Edit1: TEdit;

Edit2: TEdit;

Label5: TLabel;

Label6: TLabel;

Edit3: TEdit;

Label7: TLabel;

UpDown1: TUpDown;

Edit4: TEdit;

ComboBox1: TComboBox;

Edit5: TEdit;

Label8: TLabel;

Edit6: TEdit;

Label9: TLabel;

procedure Button1Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure FormResize(Sender: TObject);

procedure FormPaint(Sender: TObject);

procedure Panel1MouseDown(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Panel1MouseUp(Sender: TObject; Button: TMouseButton;

Shift: TShiftState; X, Y: Integer);

procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,

Y: Integer);

procedure Button2Click(Sender: TObject);

procedure Edit3Change(Sender: TObject);

procedure Edit1Change(Sender: TObject);

procedure Edit2Change(Sender: TObject);

procedure Edit4Change(Sender: TObject);

procedure Edit5Change(Sender: TObject);

procedure Edit6Change(Sender: TObject);

private

DC : HDC;

hrc: HGLRC;

{ Private declarations }

end;

type TE = array [0..2,0..2] of glfloat;

type TM = array [0..2] of glfloat;

var

Form1: TForm1;

x,y,z,m,a,b,c,d,masht : glfloat;

mx,my,mz: TE;

mm : TM;

xmaus,ymaus,rt,verx: integer;

implementation

{$R *.DFM}

{Формат пикселя}

procedure SetDCPixelFormat (hdc : HDC);

var

pfd : TPixelFormatDescriptor;

nPixelFormat : Integer;

begin

FillChar (pfd, SizeOf (pfd), 0);

pfd.dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER;

nPixelFormat := ChoosePixelFormat (hdc, @pfd);

SetPixelFormat (hdc, nPixelFormat, @pfd);

end;

{====================================================

Создание формы}

procedure TForm1.FormCreate(Sender: TObject);

begin

DC := GetDC (Form1.Panel1.Handle);

SetDCPixelFormat(DC);

hrc := wglCreateContext(DC);

wglMakeCurrent(DC, hrc);

glClearColor (0.5, 0.5, 0.75, 1.0); // цвет фона

glColor3f (1.0, 0.0, 0.5); // текущий цвет примитивов

glEnable(GL_DEPTH_TEST);

x:=0.0;

y:=0.0;

z:=0.0;

m:=1.0;

a:=0.0;

b:=0.0;

c:=0.0;

xmaus:= 0;

ymaus:=0 ;

masht:=0;

rt:= 0 ;

verx:= 0;

StringGrid1.Cells[0,0]:='1';

tringGrid1.Cells[0,1]:='0';

tringGrid1.Cells[0,2]:='0';

tringGrid1.Cells[0,3]:='0';

end;

procedure TForm1.Button1Click(Sender: TObject);

var

hx,hy,x0,y0,f0,gx,gy,e,f1: real;

i : integer;

begin

StringGrid1.ColCount:=1;

hx:=0.001;

hy:=0.002;

e:=0.002;

x0:=StrToInt(Edit1.Text);

y0:=StrToInt(Edit2.Text);

if(ComboBox1.ItemIndex=0) then begin

f0:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));

gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));

gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));

end;

if(ComboBox1.ItemIndex=1) then begin

f0:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);

gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);

gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));

end;

if(ComboBox1.ItemIndex=2) then begin

f0:=sin(x0)*cos(y0*y0);

gx:= cos(x0)*cos(y0*y0);

gy:=-2*sin(x0)*sin(y0*y0)*y0;

end;

x0:=x0+hx*gx;

y0:=y0+hy*gy;

if(ComboBox1.ItemIndex=0) then

f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));

if(ComboBox1.ItemIndex=1) then

f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);

if(ComboBox1.ItemIndex=2) then

f1:=sin(x0)*cos(y0*y0);

StringGrid1.Cells[0,0]:='1';

StringGrid1.Cells[0,1]:=FloatToStr(x0);

StringGrid1.Cells[0,2]:=FloatToStr(y0);

StringGrid1.Cells[0,3]:=FloatToStr(f1);

if f1<f0 then begin

hx:=hx/2;

hy:=hy/2;

end;

i:=1;

while not((abs(gx)<e) and (abs(gy)<e))do

begin

f0:=f1;

if(ComboBox1.ItemIndex=0) then begin

gx:=exp(x0)/(exp(x0*x0)+exp(y0*y0))-exp(x0*x0)*x0*(2*(exp(x0)+exp(y0))/((exp(x0*x0)+exp(y0*y0))*(exp(x0*x0)+exp(y0*y0))));

gy:=exp(y0)/(exp(y0*y0)+exp(x0*x0))-exp(y0*y0)*y0*(2*(exp(y0)+exp(x0))/((exp(y0*y0)+exp(x0*x0))*(exp(y0*y0)+exp(x0*x0))));

end;

if(ComboBox1.ItemIndex=1) then begin

gx:=2*sin(x0)*cos(x0)/(sin(y0)*sin(y0)+1);

gy:=-2*sin(x0)*sin(x0)*cos(y0)*sin(y0)/((sin(y0)*sin(y0)+1)*(sin(y0)*sin(y0)+1));

end;

if(ComboBox1.ItemIndex=2) then begin

gx:= cos(x0)*cos(y0*y0);

gy:=-2*sin(x0)*sin(y0*y0)*y0;

end;

x0:=x0+hx*gx;

y0:=y0+hy*gy;

if(ComboBox1.ItemIndex=0) then

f1:=(exp(x0)+exp(y0))/(exp(x0*x0)+exp(y0*y0));

if(ComboBox1.ItemIndex=1) then

f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);

if(ComboBox1.ItemIndex=2) then

f1:=sin(x0)*cos(y0*y0);

StringGrid1.Cells[i,0]:=IntToStr(i+1);

StringGrid1.Cells[i,1]:=FloatToStr(x0);

StringGrid1.Cells[i,2]:=FloatToStr(y0);

StringGrid1.Cells[i,3]:=FloatToStr(f1);

i:=i+1;

StringGrid1.ColCount:=i;

if f1<f0 then begin

hx:=hx/2;

hy:=hy/2;

end;

end;

Label1.Caption:=FloatToStr(f1);

refresh;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin

{====================================================

Конец работы приложения}

wglMakeCurrent(0, 0);

wglDeleteContext(hrc);

ReleaseDC (Panel1.Handle, DC);

DeleteDC (DC);

end;

procedure TForm1.FormResize(Sender: TObject);

begin

glViewport(0, 0, Panel1.ClientWidth, Panel1.ClientHeight);

glLoadIdentity;

glFrustum (-1, 1, -1, 1, 3, 10); // задаем перспективу

// этот фрагмент нужен для придания трёхмерности

glTranslatef(0.0, 0.0, -5); // перенос объекта - ось Z

InvalidateRect(Panel1.Handle, nil, False);

end;

procedure TForm1.FormPaint(Sender: TObject);

var

i,j: real;

zz,xl,yl,zl,zlm,stg,h: glfloat;

fy,fx,clr,clb,obl : real;

it,wn : integer;

mm1,mm2,mm3,mm4 : array [0..5] of TM;

begin

glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очистка буфера цвета

xl:=0;

yl:=0;

zl:=0;

zlm:=StrToFloat(StringGrid1.cells[0,3]);

stg:=StringGrid1.ColCount;

clr:=0;

clb:=1.0;

h:=StrToFloat(Edit3.text);

wn:=StrToInt(Edit5.text);

obl:= StrToFloat(Edit6.Text);

//ox oy oz

glscalef(masht,masht,masht);

glLineWidth(3);

glcolor3f(1.0,1.0,1.0);

glBegin(GL_Lines);

glVertex3f(-1,-1,1);

glVertex3f(1,-1,1);

glVertex3f(-1,-1,1);

glVertex3f(-1,1,1);

glVertex3f(-1,-1,1);

glVertex3f(-1,-1,-1);

glend;

glLineWidth(1);

glcolor3f(1.0,1.0,0.0);

glBegin(GL_Lines);

//x

glVertex3f(1.1-0.03,-1+0.1,1);

glVertex3f(1.1+0.03,-1-0.1,1);

glVertex3f(1.1+0.03,-1+0.1,1);

glVertex3f(1.1-0.03,-1-0.1,1);

//z

glVertex3f(-1-0.03,1.1,1);

glVertex3f(-1+0.03,1.1,1);

glVertex3f(-1-0.03,1.1,1);

glVertex3f(-1+0.03,1.2,1);

glVertex3f(-1-0.03,1.2,1);

glVertex3f(-1+0.03,1.2,1);

//y

glVertex3f(-1,-1,-1-0.1);

glVertex3f(-1,-1+0.1,-1-0.1);

glVertex3f(-1,-1+0.1,-1-0.1);

glVertex3f(-1-0.03,-1+0.2,-1-0.1);

glVertex3f(-1,-1+0.1,-1-0.1);

glVertex3f(-1+0.03,-1+0.2,-1-0.1);

glend;

// if(ComboBox1.ItemIndex=1) then begin

/f1:=sin(x0)*sin(x0)/(sin(y0)*sin(y0)+1);

/f1:=sin(x0)/(x0+y0*y0+1);

i:=-wn;

j:=-wn;

while j<=wn do begin

i:=-wn;

yl:=j;

//glBegin(GL_points);

glBegin(GL_Lines);

glcolor3f(clr,0.0,clb);

while i<=wn do begin

xl:=i; //f(x) ==

if(ComboBox1.ItemIndex=0) then

zl:=(exp(xl)+exp(yl))/(exp(xl*xl)+exp(yl*yl));

if(ComboBox1.ItemIndex=1) then

zl:=sin(xl)*sin(xl)/(sin(yl)*sin(yl)+1);

Страницы: 1, 2, 3, 4


Новости


Быстрый поиск

Группа вКонтакте: новости

Пока нет

Новости в Twitter и Facebook

                   

Новости

© 2010.