Разработка программной системы, обеспечивающей отображение и сравнение в трехмерном пространстве исходных данных из двух матричных форм
Анализ существующего подхода к построению трехмерного изображения данных из симметричных матричных форм. Технические характеристики ПЭВМ, требования к документации. Функции, автоматизирующие процесс взаимодействия пользователей с графической информацией.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 05.06.2011 |
Размер файла | 192,8 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);
glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k+1-dw);
end;
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);
glVertex3f(j+1-dw,Matrix.vx[j+1,k]-dv,k-dw);
end;
glEnd;
end;
2 : begin
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_COLOR_MATERIAL);
glColor3f(1,1,1);
glBegin(GL_TRIANGLES);
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k,1],Matrix.cx[j+1,k,2],Matrix.cx[j+1,k,3]);
glNormal3f(Matrix.nx[j+1,k,1],Matrix.nx[j+1,k,2],Matrix.nx[j+1,k,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k]-dv,k-dw);
glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);
glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);
end;
for j:=0 to Matrix.w-2 do
for k:=0 to Matrix.w-2 do
begin
glColor3f(Matrix.cx[j,k,1],Matrix.cx[j,k,2],Matrix.cx[j,k,3]);
glNormal3f(Matrix.nx[j,k,1],Matrix.nx[j,k,2],Matrix.nx[j,k,3]);
glVertex3f(j-dw,Matrix.vx[j,k]-dv,k-dw);
glColor3f(Matrix.cx[j,k+1,1],Matrix.cx[j,k+1,2],Matrix.cx[j,k+1,3]);
glNormal3f(Matrix.nx[j,k+1,1],Matrix.nx[j,k+1,2],Matrix.nx[j,k+1,3]);
glVertex3f(j-dw,Matrix.vx[j,k+1]-dv,k-dw+1);
glColor3f(Matrix.cx[j+1,k+1,1],Matrix.cx[j+1,k+1,2],Matrix.cx[j+1,k+1,3]);
glNormal3f(Matrix.nx[j+1,k+1,1],Matrix.nx[j+1,k+1,2],Matrix.nx[j+1,k+1,3]);
glVertex3f(j-dw+1,Matrix.vx[j+1,k+1]-dv,k-dw+1);
end;
glEnd;
glDisable(GL_COLOR_MATERIAL);
end;
end;
except
Matrix.w:=0;
MessageBox(Handle,'Ошибка при прорисовке изображения',
'Ошибка',MB_OK or MB_ICONERROR);
end;
EndPaint(Panel4.Handle,ps);
glRotatef(120,1.0,0.0,0.0); // Rotate on x
glRotatef(120,0.0,1.0,0.0); // Rotate on y
glRotatef(120,0.0,0.0,1.0); // Rotate on z
SwapBuffers(MyPanels.DC);
//временная защита кода
// stroka := 'Это демонстрационная версия!!!';
// TextOut(myPanels.DC,300,200,PChar(stroka),Length(stroka));
// stroka := 'Программа сделана на заказ!!!';
// TextOut(myPanels.DC,300,220,PChar(stroka),Length(stroka));
// stroka := 'лоалофв аофоа длфыв а лдо';
// TextOut(myPanels.DC,300,240,PChar(stroka),Length(stroka));
end;
end;
procedure TMat.SelPos(var Matrix:TMatrix; xx:Integer;yy:Integer);
var
fx:Integer;
s:string;
begin
if (Matrix.w>0) then
begin
for fx := 0 to Matrix.w-1 do
begin
Matrix.cx[LastCCx,fx,1]:=Matrix.cc[LastCCx,fx,1];
Matrix.cx[LastCCx,fx,2]:=Matrix.cc[LastCCx,fx,2];
Matrix.cx[LastCCx,fx,3]:=Matrix.cc[LastCCx,fx,3];
Matrix.cx[fx,LastCCy,1]:=Matrix.cc[fx,LastCCy,1];
Matrix.cx[fx,LastCCy,2]:=Matrix.cc[fx,LastCCy,2];
Matrix.cx[fx,LastCCy,3]:=Matrix.cc[fx,LastCCy,3];
Matrix.cx[xx,fx,1]:=1;
Matrix.cx[xx,fx,2]:=1;
Matrix.cx[xx,fx,3]:=1;
Matrix.cx[fx,yy,1]:=1;
Matrix.cx[fx,yy,2]:=1;
Matrix.cx[fx,yy,3]:=1;
end;
LastCCx:=xx;
LastCCy:=yy;
s:=FormatFloat('0.00', Matrix.vx[LastCCx,LastCCy]);
// if Matrix.vx[LastCCx,LastCCy] < 0 then s:= '-'+s;
// Edit3.Text:=FloatToStr(Round(Matrix.vx[LastCCx,LastCCy]*100)/100);
Edit3.Text := s;
end; трехмерный изображение матричный графический
end;
//-----------------------------------------------------------------------------
function TMat.LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;
var
i,j :Integer;
ss : string;
begin
Result := false;
if not FileExists(filename) then exit;
with Matrix do
begin
bmp.Width:=0;
bmp.Height:=0;
bmp.LoadFromFile(OpenPictureDialog1.FileName);
w:=bmp.Width;
UpDown1.Max:=w;
UpDown2.Max:=w;
LastCCX:=w div 2;
LastCCY:=w div 2;
SetLength(vx,w);
SetLength(nx,w);
SetLength(cx,w);
SetLength(cc,w);
for i:=0 to w-1 do
begin
SetLength(vx[i],w);
SetLength(nx[i],w);
SetLength(cx[i],w);
SetLength(cc[i],w);
end;
ss:='';
ListBox1.Items.Clear;
for i:=0 to w-1 do
begin
for j:=0 to w-1 do
begin
vx[i,j]:=(GetRValue(bmp.Canvas.Pixels[i,j])+
GetGValue(bmp.Canvas.Pixels[i,j])+
GetBValue(bmp.Canvas.Pixels[i,j]))/50;
if vx[i,j]>10 then vx[i,j]:=9+(random(99)+1)/100;
ss:=ss+FormatFloat('0.00', vx[i,j])+' ';
cx[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;
cx[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;
cx[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;
cc[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;
cc[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;
cc[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;
end;
ListBox1.Items.Add(ss);
ss:='';
end;
Zcoord :=w*2;
SelPos(Matrix, LastCCX, LastCCY);
UpDown1.Position:=LastCCX;
UpDown2.Position:=LastCCY;
end;
Result := true;
end;
function TMat.LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;
var
i,x,y,j,k,posp,posbar:Integer;
spr,sfl,ss,formfl:String;
Fres : TFloatRec;
Conv : Extended ;
coint :integer;
ValStr :Extended;
begin
Result := false;
if not FileExists(filename) then exit;
with Matrix do
begin
LBData.Items.Clear;
bar.Position:=0;
progress.Visible:=True;
progress.Update;
LBData.Items.LoadFromFile(FileName);
if LBData.Items.Count>5 then
begin
bar.Position:=5;
bar.Update;
w:=LBData.Items.Count;
UpDown1.Max:=w;
UpDown2.Max:=w;
LastCCX:=w div 2;
LastCCY:=w div 2;
SetLength(vx,w);
SetLength(nx,w);
SetLength(cx,w);
SetLength(cc,w);
for i:=0 to w-1 do
begin
SetLength(vx[i],w);
SetLength(nx[i],w);
SetLength(cx[i],w);
SetLength(cc[i],w);
for y :=0 to w-1 do
begin
vx[i,y]:=0;
nx[i,y,1]:=0;
nx[i,y,2]:=0;
nx[i,y,3]:=0;
cx[i,y,1]:=0;
cx[i,y,2]:=0;
cx[i,y,3]:=0;
cc[i,y,1]:=0;
cc[i,y,2]:=0;
cc[i,y,3]:=0;
end;
end;
yess:=True;
mess:='';
for y :=0 to w-1 do
begin
spr:=LBData.Items[y];
x:=0;
while (((pos(' ',spr)>0) or (Length(spr)>0)) and (Yess=True) and (x<w)) do
begin
posp:=pos(' ',spr);
If (posp>0) then
begin
sfl:=trim (copy(spr,0,posp));
delete(spr,1,posp);
ValStr:=strtofloatdef(sfl,-100);
If (ValStr=-100) then
begin
yess:=False;
if (Length(mess)=0) then mess:='Неверное значение'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+sfl+']';
break;
end;
If ((ValStr<-10) or (ValStr>10)) then
begin
yess:=False;
if (Length(mess)=0) then mess:='Значение >10, либо <-10'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+sfl+']';
break;
end else vx[x,y]:=ValStr;
end else
begin
spr:=Trim(spr);
ValStr:=strtofloatdef(spr,-100);
If (ValStr=-100) then
begin
yess:=False;
if (Length(mess)=0) then mess:='Неверное значение'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+spr+']';
break;
end;
If ((ValStr<-10) or (ValStr>10)) then
begin
yess:=False;
if (Length(mess)=0) then mess:='Значение >10, либо <-10'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+spr+']';
break;
end else vx[x,y]:=ValStr;
spr:='';
end;
inc(x);
end;
formfl := FormatFloat('0',70*(((y+1)*(x))/(w*w)));
coint:=StrToInt(formfl);
bar.Position:=5+coint;
bar.Update;
// mat.Caption :=mat.Caption+inttostr(x)+' ';
if (x<w) then
begin
Yess:=false;
if (Length(mess)=0) then mess:='строка '+ IntToStr(y+1)+#13#10+'короткая, либо излишек строк в файле';
break;
end;
if (spr<>'') then
begin
Yess:=false;
if (Length(mess)=0) then mess:='строка '+ IntToStr(y+1)+#13#10+'длинная, либо недостаточно строк в файле';
break;
end;
end;
end else
begin
Yess:=false;
mess:='Форма должна иметь'+#13#10+'размер более чем 5х5';
end;
if Yess=true then
begin
bar.Position:=90;
bar.Update;
for i:=0 to w-1 do
begin
for j:=0 to w-1 do
begin
cx[i,j,1]:=(vx[i,j]+1)/9;
cx[i,j,2]:=1-vx[i,j+1]/9;
cx[i,j,3]:=0;
cc[i,j,1]:=(vx[i,j]+1)/9;
cc[i,j,2]:=1-vx[i,j+1]/9;
cc[i,j,3]:=0;
end;
end;
for i:=0 to w-1 do
for j:=0 to w-1 do
for k:=1 to 3 do
nx[i,j,k]:=1;
for i:=0 to w-2 do
for j:=0 to w-2 do
begin
CalcNormals(i,vx[i,j],j,
i+1,vx[i+1,j],j,
i+1,vx[i+1,j+1],j+1,
nx[i,j,1],nx[i,j,2],nx[i,j,3]);
end;
bar.Position:=100;
bar.Update;
Zcoord :=w*2;
XRot:=90;
YRot:=0;
UpDown1.Position:=LastCCX;
UpDown2.Position:=LastCCY;
SelPos(Matrix,LastCCX, LastCCY);
progress.Hide;
Panel4.Show;
end;
end;
Result := Yess;
end;
//-----------------------------------------------------------------------------
procedure TMat.bmp1Click(Sender: TObject);
begin
try
if OpenPictureDialog1.Execute then
if FileExists(OpenPictureDialog1.FileName) then
begin
self.LoadMatrixFromBitmap(OpenPictureDialog1.FileName,self.MCurrent^);
self.GL(self.MCurrent^);
end else
MessageBox(Handle,
PAnsiChar('Файл '+OpenPictureDialog1.FileName+' не найден'),
'Ошибка',MB_OK or MB_ICONERROR);
except
MessageBox(Handle,
PAnsiChar('Ошибка во время загрузки файла '+
OpenPictureDialog1.FileName),
'Ошибка',MB_OK or MB_ICONERROR);
end;
end;
procedure TMat.Panel4MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
if Button = mbLeft then
begin
MouseButton :=1;
Xcoord := X;
Ycoord := Y;
end;
if Button = mbRight then
begin
MouseButton :=2;
Zcoord := Y;
end;
end;
procedure TMat.Panel4MouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
begin
if MouseButton = 1 then
begin
xRot := xRot + (Y - Ycoord) div 2; // moving up and down = rot around X-axis
yRot := yRot + (X - Xcoord)div 2;
Xcoord := X;
Ycoord := Y;
GL(self.MCurrent^);
end;
if MouseButton = 2 then
begin
Depth :=Depth - (Y-ZCoord) div 3;
Zcoord := Y;
GL(self.MCurrent^);
end;
// caption:=inttostr(xRot)+':'+inttostr(yRot);
end;
procedure TMat.Panel4MouseUp(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
begin
MouseButton :=0;
end;
procedure TMat.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if Ord(Key)<>8 then if ((key<'0') or (key>'9')) then Key:=#0;
end;
procedure TMat.Edit1Change(Sender: TObject);
var
x:Integer;
begin
If TryStrToInt(Edit1.Text,x)
then begin
if x>self.MCurrent^.w then Edit1.Text:=IntToStr(self.MCurrent^.w);
If x<2 then Edit1.Text:='1';
end
else begin
Edit1.Text:='1';
end;
SelPos(self.MCurrent^,UpDown1.Position-1,LastCCY);
GL(self.MCurrent^);
end;
procedure TMat.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if Ord(Key)<>8 then if ((key<'0') or (key>'9')) then Key:=#0;
end;
procedure TMat.Edit2Change(Sender: TObject);
var
x:Integer;
begin
If TryStrToInt(Edit2.Text,x)
then begin
if x>self.MCurrent^.w then Edit2.Text:=IntToStr(self.MCurrent^.w);
If x<2 then Edit2.Text:='1';
end
else begin
Edit2.Text:='1';
end;
SelPos(self.MCurrent^,LastCCX,UpDown2.Position-1);
GL(self.MCurrent^);
end;
procedure TMat.CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);
var
wrki: Double;
vx1,vy1,vz1,vx2,vy2,vz2: Double;
begin
vx1:=x1-x2;
vy1:=y1-y2;
vz1:=z1-z2;
vx2:=x2-x3;
vy2:=y2-y3;
vz2:=z2-z3;
wrki:=sqrt(sqr(vy1*vz2-vz1*vy2)+sqr(vz1*vx2-vx1*vz2)+sqr(vx1*vy2-vy1*vx2));
nx:=-(vy1 * vz2 - vz1 * vy2)/wrki;
ny:=-(vz1 * vx2 - vx1 * vz2)/wrki;
nz:=-(vx1 * vy2 - vy1 * vx2)/wrki;
end;
procedure TMat.Button1Click(Sender: TObject);
begin
ListBox1.Items.SaveToFile(ChangeFileExt(Application.ExeName,'.txt'));
end;
procedure TMat.Init();
begin
Edit1.OnChange :=Edit1Change;
Edit1.OnKeyPress :=Edit1KeyPress;
Edit2.OnChange :=Edit2Change;
Edit2.OnKeyPress :=Edit2KeyPress;
Panel4.OnMouseDown :=Panel4MouseDown;
Panel4.OnMouseMove :=Panel4MouseMove;
Panel4.OnMouseUp :=Panel4MouseUp;
end;
procedure TMat.Button3Click(Sender: TObject);
begin
About.ShowModal;
end;
procedure TMat.Button4Click(Sender: TObject);
begin
Edit1.OnChange :=nil;
Edit1.OnKeyPress :=nil;
Edit2.OnChange :=nil;
Edit2.OnKeyPress :=nil;
Panel4.OnMouseDown :=nil;
Panel4.OnMouseMove :=nil;
Panel4.OnMouseUp :=nil;
Close;
end;
//проводим анализ данных, точки совпадения красным, ниже синим, выше зеленым
function TMat.MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;
var
i,j,k,y:integer;
begin
Result := false;
//инициализация результ. матрицы
Matrix03.w := Matrix01.w;
with Matrix03 do
begin
SetLength(vx,w);
SetLength(nx,w);
SetLength(cx,w);
SetLength(cc,w);
for i:=0 to w-1 do
begin
SetLength(vx[i],w);
SetLength(nx[i],w);
SetLength(cx[i],w);
SetLength(cc[i],w);
for y :=0 to w-1 do
begin
vx[i,y]:=Matrix01.vx[i,y];
nx[i,y,1]:=Matrix01.nx[i,y,1];
nx[i,y,2]:=Matrix01.nx[i,y,2];
nx[i,y,3]:=Matrix01.nx[i,y,3];
cx[i,y,1]:=Matrix01.cx[i,y,1];
cx[i,y,2]:=Matrix01.cx[i,y,2];
cx[i,y,3]:=Matrix01.cx[i,y,3];
cc[i,y,1]:=Matrix01.cc[i,y,1];
cc[i,y,2]:=Matrix01.cc[i,y,2];
cc[i,y,3]:=Matrix01.cc[i,y,3];
cx[i,y,1]:=255;
cx[i,y,2]:=255;
cx[i,y,3]:=255;
//часть первого, которая не пересеклась со вторым
//окрашиваем в желтый цвет
if Matrix02.vx[i,y] = 0 then
begin
cx[i,y,1]:=(vx[i,y]+1)/6;
cx[i,y,2]:=(vx[i,y]+1)/6;
cx[i,y,3]:=0;
end;
//часть второго, которая не пересеклась с первой
//окрашиваем в красный цвет
if Matrix01.vx[i,y] = 0 then
begin
vx[i,y]:=Matrix02.vx[i,y];
cx[i,y,1]:=(vx[i,y]+1)/6;
cx[i,y,2]:=0;
cx[i,y,3]:=0;
end;
//если нет поверхностей => зеленый
if (Matrix01.vx[i,y] = 0)
and (Matrix02.vx[i,y] = 0)then
begin
cx[i,y,1]:=0;
cx[i,y,2]:=(vx[i,y]+1)/2;
cx[i,y,3]:=0;
end;
//совпадающие обозначае зеленым цветом
if (Matrix01.vx[i,y] = Matrix02.vx[i,y])
and (Matrix01.vx[i,y] <> 0)
and (Matrix02.vx[i,y] <> 0)then
begin
cx[i,y,1]:=0;
cx[i,y,2]:=(vx[i,y]+1)/2;
cx[i,y,3]:=0;
end;
//те, которые выше - делаем зеленым
if (Matrix01.vx[i,y] < Matrix02.vx[i,y])
and (Matrix01.vx[i,y] <> 0)
and (Matrix02.vx[i,y] <> 0)then
begin
vx[i,y]:=Matrix02.vx[i,y];
cx[i,y,1]:=0;
cx[i,y,2]:=(vx[i,y]+1)/2;;
cx[i,y,3]:=0;
end;
//те, которые ниже будут синим
if (Matrix01.vx[i,y] > Matrix02.vx[i,y])
and (Matrix01.vx[i,y] <> 0)
and (Matrix02.vx[i,y] <> 0)then
begin
cx[i,y,1]:=(vx[i,y]+1)/6;
cx[i,y,2]:=0;
cx[i,y,3]:=0;
end;
cc[i,y,1]:=cx[i,y,1];
cc[i,y,2]:=cx[i,y,2];
cc[i,y,3]:=cx[i,y,3];
end;
end;
end;
{
w:Integer; //размерность матрицы
vx:Array of Array of Extended;//массив вершин
nx:Array of Array of Array[1..3] of Extended;//массив нормалей
cx:Array of Array of Array[1..3] of GLfloat;//массив цветов
cc:Array of Array of Array[1..3] of GLfloat;//массив цветов
}
Result := true;
end;
procedure TMat.cb_SurfaceClick(Sender: TObject);
begin
GL(self.MCurrent^);
end;
procedure TMat.Button2Click(Sender: TObject);
begin
//возможно, режим анализа поверхностей
if self.ComboBoxMatrix.ItemIndex = 2 then
begin
if not self.MakeAnalysMatrixData(self.myMatrix01, self.myMatrix02, self.myMatrix03) then
begin
ShowMessage('Не удалось провести анализ поверхностей!');
end;
self.GL(self.MCurrent^);
exit;
end;
Panel4.Hide;
FoDialog.InitialDir:=ExtractFilePath(Application.ExeName);
If FoDialog.Execute then
begin
if self.LoadMatrixFromDtFile(FoDialog.FileName,self.MCurrent^) then
begin
self.GL(self.MCurrent^);
end else //Yess=false
begin
progress.Hide;
MessageBox(Handle,PAnsiChar('Ошибка в файле данных!'+#13#10+self.mess),PAnsiChar('Ошибка'),MB_OK or MB_ICONINFORMATION);
Panel4.Hide;
// w:=0;
end;
end;
end;
procedure TMat.ComboBoxMatrixChange(Sender: TObject);
begin
if self.ComboBoxMatrix.ItemIndex = 0 then self.MCurrent := @self.myMatrix01;
if self.ComboBoxMatrix.ItemIndex = 1 then self.MCurrent := @self.myMatrix02;
if self.ComboBoxMatrix.ItemIndex = 2 then self.MCurrent := @self.myMatrix03;
self.Button2.Caption := 'Загрузить';
if self.ComboBoxMatrix.ItemIndex = 2 then self.Button2.Caption := 'Провести анализ';
self.GL(self.MCurrent^);
exit;
end;
procedure TMat.Edit3Change(Sender: TObject);
var
pos_x:integer;
pos_y:integer;
value:real;
begin
//изменение значения вершины
pos_x := self.UpDown1.Position-1;
pos_y := self.UpDown2.Position-1;
value := StrToFloatDef(self.Edit3.Text,-1000);
if value > -1000 then
self.MCurrent^.vx[pos_x,pos_y] := value;
// else
// self.Edit3.Text := FloatToStr(self.MCurrent^.vx[pos_x,pos_y]);
//теперь просчитываем цвета
With self.MCurrent^ do
begin
cx[pos_x,pos_y,1]:=(vx[pos_x,pos_y]+1)/9;
cx[pos_x,pos_y,2]:=1-vx[pos_x,pos_y+1]/9;
cx[pos_x,pos_y,3]:=0;
cc[pos_x,pos_y,1]:=(vx[pos_x,pos_y]+1)/9;
cc[pos_x,pos_y,2]:=1-vx[pos_x,pos_y+1]/9;
cc[pos_x,pos_y,3]:=0;
end;
//после изменений перерисовываем
self.GL(self.MCurrent^);
exit;
end;
procedure TMat.BitBtnSaveClick(Sender: TObject);
var
Spisok:TStringList;
stroka:string;
k,y:integer;
begin
//button "save" click
if self.MCurrent^.w = 0 then
begin
ShowMessage('Матрица не загружена!');
exit;
end;
if self.SaveDialogMain.FileName = '' then
self.SaveDialogMain.InitialDir := ExtractFileDir(ParamStr(0));
if not self.SaveDialogMain.Execute() then exit;
//---------------------------------------------
Spisok := TStringList.Create();
with self.MCurrent^ do
begin
for y:= 0 to w-1 do
begin
stroka := '';
for k:= 0 to w-1 do
begin
stroka := stroka + ' ' + FloatToStr(vx[k,y]);
continue;
end;
stroka := trim(stroka);
Spisok.Add(stroka);
end;
end;
Spisok.SaveToFile(self.SaveDialogMain.FileName);
Spisok.Free();
//---------------------------------------------
ShowMessage('Матрица была сохранена.');
exit;
end;
end.
);
var
Spisok:TStringList;
stroka:string;
k,y:integer;
begin
//button "save" click
if self.MCurrent^.w = 0 then
begin
ShowMessage('Матрица не загружена!');
exit;
end;
if self.SaveDialogMain.FileName = '' then
self.SaveDialogMain.InitialDir := ExtractFileDir(ParamStr(0));
if not self.SaveDialogMain.Execute() then exit;
//---------------------------------------------
Spisok := TStringList.Create();
with self.MCurrent^ do
begin
for y:= 0 to w-1 do
begin
stroka := '';
for k:= 0 to w-1 do
begin
stroka := stroka + ' ' + FloatToStr(vx[k,y]);
continue;
end;
stroka := trim(stroka);
Spisok.Add(stroka);
end;
end;
Spisok.SaveToFile(self.SaveDialogMain.FileName);
Spisok.Free();
//---------------------------------------------
ShowMessage('Матрица была сохранена.');
exit;
end;
end.
Размещено на Allbest.ru
Подобные документы
Проектирование программной системы, предназначенной для работников приемной комиссии вуза. Разработка базы данных в пакете Microsoft Office Access, обеспечивающей хранение сведений об абитуриентах. Создание пользовательских форм, запросов и отчетов.
контрольная работа [2,5 M], добавлен 25.03.2015Характеристика основных этапов создания программной системы. Сведения, хранимые в базе данных информационной системы музея. Описание данных, их типов и ограничений. Проектирование базы данных методом нормальных форм. Технические и программные средства.
курсовая работа [1,8 M], добавлен 23.01.2014Разработка проекта системы, программы, интерфейса взаимодействия пользователя с системой. Программная база для реализации проекта "Электронная администрация". Создание удобной среды для пользователей системы. Разработка форм входных и выходных данных.
дипломная работа [3,9 M], добавлен 20.06.2012Создание базы данных при помощи СУБД, разработка собственного приложения. Информационно-логическая модель рекламного агентства. Структура реляционной базы данных в Access. Заполнение таблиц информацией. Структура приложения и взаимодействия форм.
курсовая работа [12,6 M], добавлен 17.06.2014Таблицы и логические структуры базы данных аптеки готовых лекарственных форм. Проектирование таблиц, детальное описание полей подсистем, заполнение таблиц информацией. Разработка запросов, создание форм. Формирование отчетов, инструкция пользователю.
курсовая работа [3,4 M], добавлен 29.04.2010Создание базы данных "Компьютерные игры": разработка и дизайн интерфейса, наполнение таблиц информацией, формирование идентификаторов. Использование системы управления базами данных Microsoft Access для составления стандартных запросов, форм и отчетов.
курсовая работа [715,7 K], добавлен 29.01.2011Создание HTML-форм. Ввод многострочного текста. Тег FORM - контейнер форм. Трансляция переменных окружения. Передача данных с помощью формы. Приложения, хранящие данные о регистрации пользователей в базе данных MySQL. Порядок трансляции переменных.
лекция [5,6 M], добавлен 27.04.2009Разработка структуры пользовательского интерфейса автоматизированной системы. Концептуальная модель базы данных. Структура экранных форм ввода данных. Индивидуальные процедуры взаимодействия с текстовым редактором "Word" и электронными таблицами "Excel".
курсовая работа [276,6 K], добавлен 16.02.2016Создание таблиц в приложении Microsoft Access; определение связей между ними. Задание полю индивидуального значения. Разработка запросов в режиме конструктора, форм с помощью "Мастера форм" и отчетов. Составление главной и подчиненных кнопочных форм.
курсовая работа [3,8 M], добавлен 13.02.2013Построение инфологической концептуальной модели предметной области. Связи между таблицами в схеме данных MS Access. Окно ввода данных в запросе. Создание форм с помощью мастера. Запрос на выборку данных. Разработка эксплуатационной документации.
курсовая работа [2,6 M], добавлен 04.01.2015