Разработка программной системы, обеспечивающей отображение и сравнение в трехмерном пространстве исходных данных из двух матричных форм

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



ix; xx:Integer;yy:Integer);:Integer;:string;(Matrix.w>0) thenfx := 0 to Matrix.w-1 do.cx[LastCCx,fx,1]:=Matrix.cc[LastCCx,fx,1];.cx[LastCCx,fx,2]:=Matrix.cc[LastCCx,fx,2];.cx[LastCCx,fx,3]:=Matrix.cc[LastCCx,fx,3];.cx[fx,LastCCy,1]:=Matrix.cc[fx,LastCCy,1];.cx[fx,LastCCy,2]:=Matrix.cc[fx,LastCCy,2];.cx[fx,LastCCy,3]:=Matrix.cc[fx,LastCCy,3];.cx[xx,fx,1]:=1;.cx[xx,fx,2]:=1;.cx[xx,fx,3]:=1;.cx[fx,yy,1]:=1;.cx[fx,yy,2]:=1;.cx[fx,yy,3]:=1;;:=xx;:=yy;:=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);3.Text := s;

end; трехмерный изображение матричный графический

end;

//-----------------------------------------------------------------------------TMat.LoadMatrixFromBitmap(filename:string; var Matrix:TMatrix):boolean;,j :Integer;: string;:= false;not FileExists(filename) then exit;Matrix do.Width:=0;.Height:=0;.LoadFromFile(OpenPictureDialog1.FileName);:=bmp.Width;.Max:=w;.Max:=w;:=w div 2;:=w div 2;(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);;:='';.Items.Clear;i:=0 to w-1 doj:=0 to w-1 do[i,j]:=(GetRValue(bmp.Canvas.Pixels[i,j])+(bmp.Canvas.Pixels[i,j])+(bmp.Canvas.Pixels[i,j]))/50;vx[i,j]>10 then vx[i,j]:=9+(random(99)+1)/100;:=ss+FormatFloat('0.00', vx[i,j])+' ';[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;[i,j,1]:=GetRValue(bmp.Canvas.Pixels[i,j])/255;[i,j,2]:=GetGValue(bmp.Canvas.Pixels[i,j])/255;[i,j,3]:=GetBValue(bmp.Canvas.Pixels[i,j])/255;;.Items.Add(ss);:='';;:=w*2;(Matrix, LastCCX, LastCCY);.Position:=LastCCX;.Position:=LastCCY;;:= true;;TMat.LoadMatrixFromDtFile(filename:string; var Matrix:TMatrix):boolean;,x,y,j,k,posp,posbar:Integer;,sfl,ss,formfl:String;: TFloatRec;: Extended ;:integer;:Extended;:= false;not FileExists(filename) then exit;Matrix do.Items.Clear;.Position:=0;.Visible:=True;.Update;.Items.LoadFromFile(FileName);LBData.Items.Count>5 then.Position:=5;.Update;:=LBData.Items.Count;.Max:=w;.Max:=w;:=w div 2;:=w div 2;(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);y :=0 to w-1 do[i,y]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;[i,y,1]:=0;[i,y,2]:=0;[i,y,3]:=0;;;:=True;:='';y :=0 to w-1 do:=LBData.Items[y];:=0;(((pos(' ',spr)>0) or (Length(spr)>0)) and (Yess=True) and (x10, либо <-10'+#13#10+'строка '+ IntToStr(y+1)+#13#10+'позиция '+IntToStr(x+1)+#13#10+'['+spr+']';;else vx[x,y]:=ValStr;:='';;(x);;:= FormatFloat('0',70*(((y+1)*(x))/(w*w)));:=StrToInt(formfl);.Position:=5+coint;.Update;

// mat.Caption :=mat.Caption+inttostr(x)+' ';(x'') then:=false;(Length(mess)=0) then mess:='строка '+ IntToStr(y+1)+#13#10+'длинная, либо недостаточно строк в файле';;;;else:=false;

mess:='Форма должна иметь'+#13#10+'размер более чем 5х5';

end;Yess=true then.Position:=90;.Update;i:=0 to w-1 doj:=0 to w-1 do[i,j,1]:=(vx[i,j]+1)/9;[i,j,2]:=1-vx[i,j+1]/9;[i,j,3]:=0;[i,j,1]:=(vx[i,j]+1)/9;[i,j,2]:=1-vx[i,j+1]/9;[i,j,3]:=0;;;i:=0 to w-1 doj:=0 to w-1 dok:=1 to 3 do[i,j,k]:=1;i:=0 to w-2 doj:=0 to w-2 do(i,vx[i,j],j,+1,vx[i+1,j],j,+1,vx[i+1,j+1],j+1,[i,j,1],nx[i,j,2],nx[i,j,3]);;.Position:=100;.Update;:=w*2;:=90;:=0;.Position:=LastCCX;.Position:=LastCCY;(Matrix,LastCCX, LastCCY);.Hide;.Show;;;:= Yess;;

//-----------------------------------------------------------------------------TMat.bmp1Click(Sender: TObject);OpenPictureDialog1.Execute thenFileExists(OpenPictureDialog1.FileName) then.LoadMatrixFromBitmap(OpenPictureDialog1.FileName,self.MCurrent^);.GL(self.MCurrent^);else(Handle,('Файл '+OpenPictureDialog1.FileName+' не найден'),

'Ошибка',MB_OK or MB_ICONERROR);(Handle,('Ошибка во время загрузки файла '+.FileName),

'Ошибка',MB_OK or MB_ICONERROR);;;TMat.Panel4MouseDown(Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);Button = mbLeft then:=1;:= X;:= Y;;Button = mbRight then:=2;:= Y;;;TMat.Panel4MouseMove(Sender: TObject; Shift: TShiftState;, Y: Integer);MouseButton = 1 then:= xRot + (Y - Ycoord) div 2; // moving up and down = rot around X-axis:= yRot + (X - Xcoord)div 2;:= X;:= Y;(self.MCurrent^);; MouseButton = 2 then:=Depth - (Y-ZCoord) div 3;:= Y;(self.MCurrent^);;

// caption:=inttostr(xRot)+':'+inttostr(yRot);;TMat.Panel4MouseUp(Sender: TObject; Button: TMouseButton;: TShiftState; X, Y: Integer);:=0;;TMat.Edit1KeyPress(Sender: TObject; var Key: Char);Ord(Key)self.MCurrent^.w then Edit2.Text:=IntToStr(self.MCurrent^.w);x<2 then Edit2.Text:='1';begin.Text:='1';;(self.MCurrent^,LastCCX,UpDown2.Position-1);(self.MCurrent^);;TMat.CalcNormals(x1,y1,z1,x2,y2,z2,x3,y3,z3:Extended; var nx,ny,nz:Extended);: Double;,vy1,vz1,vx2,vy2,vz2: Double;:=x1-x2;:=y1-y2;:=z1-z2;:=x2-x3;:=y2-y3;:=z2-z3;:=sqrt(sqr(vy1*vz2-vz1*vy2)+sqr(vz1*vx2-vx1*vz2)+sqr(vx1*vy2-vy1*vx2));:=-(vy1 * vz2 - vz1 * vy2)/wrki;:=-(vz1 * vx2 - vx1 * vz2)/wrki;:=-(vx1 * vy2 - vy1 * vx2)/wrki;;TMat.Button1Click(Sender: TObject);.Items.SaveToFile(ChangeFileExt(Application.ExeName,'.txt'));;TMat.Init();.OnChange :=Edit1Change;.OnKeyPress :=Edit1KeyPress;.OnChange :=Edit2Change;.OnKeyPress :=Edit2KeyPress;.OnMouseDown :=Panel4MouseDown;.OnMouseMove :=Panel4MouseMove;.OnMouseUp :=Panel4MouseUp;;TMat.Button3Click(Sender: TObject);.ShowModal;;TMat.Button4Click(Sender: TObject);.OnChange :=nil;.OnKeyPress :=nil;.OnChange :=nil;.OnKeyPress :=nil;.OnMouseDown :=nil;.OnMouseMove :=nil;.OnMouseUp :=nil;;;

//проводим анализ данных, точки совпадения красным, ниже синим, выше зеленым

function TMat.MakeAnalysMatrixData(Matrix01,Matrix02:TMatrix; var Matrix03:TMatrix):boolean;,j,k,y:integer;

Result := false;

//инициализация результ. матрицы

Matrix03.w := Matrix01.w;Matrix03 do(vx,w);(nx,w);(cx,w);(cc,w);i:=0 to w-1 do(vx[i],w);(nx[i],w);(cx[i],w);(cc[i],w);y :=0 to w-1 do[i,y]:=Matrix01.vx[i,y];[i,y,1]:=Matrix01.nx[i,y,1];[i,y,2]:=Matrix01.nx[i,y,2];[i,y,3]:=Matrix01.nx[i,y,3];[i,y,1]:=Matrix01.cx[i,y,1];[i,y,2]:=Matrix01.cx[i,y,2];[i,y,3]:=Matrix01.cx[i,y,3];[i,y,1]:=Matrix01.cc[i,y,1];[i,y,2]:=Matrix01.cc[i,y,2];[i,y,3]:=Matrix01.cc[i,y,3];[i,y,1]:=255;[i,y,2]:=255;[i,y,3]:=255;

//часть первого, которая не пересеклась со вторым

//окрашиваем в желтый цвет

if Matrix02.vx[i,y] = 0 then

begin[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=(vx[i,y]+1)/6;[i,y,3]:=0;;

//часть второго, которая не пересеклась с первой

//окрашиваем в красный цвет

if Matrix01.vx[i,y] = 0 then

begin[i,y]:=Matrix02.vx[i,y];[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=0;[i,y,3]:=0;

end;

//если нет поверхностей => зеленый

if (Matrix01.vx[i,y] = 0)(Matrix02.vx[i,y] = 0)then[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;[i,y,3]:=0;

end;

//совпадающие обозначае зеленым цветом

if (Matrix01.vx[i,y] = Matrix02.vx[i,y])(Matrix01.vx[i,y] 0)then[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;[i,y,3]:=0;

end;

//те, которые выше - делаем зеленым

if (Matrix01.vx[i,y] 0)then[i,y]:=Matrix02.vx[i,y];[i,y,1]:=0;[i,y,2]:=(vx[i,y]+1)/2;;[i,y,3]:=0;

end;

//те, которые ниже будут синим

if (Matrix01.vx[i,y] > Matrix02.vx[i,y])(Matrix01.vx[i,y] 0)then[i,y,1]:=(vx[i,y]+1)/6;[i,y,2]:=0;[i,y,3]:=0;;[i,y,1]:=cx[i,y,1];[i,y,2]:=cx[i,y,2];[i,y,3]:=cx[i,y,3];;;

end;

{

w:Integer; //размерность матрицы

vx:Array of Array of Extended;//массив вершин:Array of Array of Array[1..3] of Extended;//массив нормалей:Array of Array of Array[1..3] of GLfloat;//массив цветов:Array of Array of Array[1..3] of GLfloat;//масс