Поиск по базе сайта:
Пояснительная записка к дипломной работе на тему icon

Пояснительная записка к дипломной работе на тему




НазваПояснительная записка к дипломной работе на тему
Сторінка21/21
Дата конвертації08.07.2013
Розмір1.22 Mb.
ТипПояснительная записка
1   ...   13   14   15   16   17   18   19   20   21

{

while(i
{

if( apix[i][j][2]==n // точка принадлежит этому узлу

// && apix[i][j][1]>0 // есть пересечение с линией

)

{

xsum+=i;

ysum+=j;

cnt+=1;

}

i+=1;

} // while i

i=0; j+=1;

} // while j

if(cnt>0)

{

x=xsum/cnt;

y=ysum/cnt;

}

return Point(x,y);

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actZoomWndExecute(TObject *Sender)

{

if(w>0 || h>0)

{

zoom=min(scb1->Width,scb1->Height)/max(w,h);

ZoomTo(zoom);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::GetLineVect(int x,int y,int n)

{

TPoint p;

if(apix[x][y][1]==n && apix[x][y][3]==-1) // принадлежит этой линии и не обработана в код

{

// обработка текущей точки

apix[x][y][3]=1;

if(linecode=="")

linecode+=IntToStr(x)+","+IntToStr(y);

else

linecode+=","+IntToStr(x)+","+IntToStr(h-1-y);

// обрабтка продолжения линии

if(apix[x][y][2]>0) // если пересечение с сегментом

{// обработка линии внутри сегмента

p=FindMatch(x,y);

CodeLine(x,y,p.x,p.y); // вывод кода линии внутри сегмента

x=p.x;

y=p.y;

apix[x][y][3]=1;

if(linecode=="")

linecode+=IntToStr(x)+","+IntToStr(y);

else

linecode+=","+IntToStr(x)+","+IntToStr(h-1-y);

}

GetLineVect(x-1,y-1,n); GetLineVect(x,y-1,n); GetLineVect(x+1,y-1,n);

GetLineVect(x-1,y ,n); GetLineVect(x+1,y ,n);

GetLineVect(x-1,y+1,n); GetLineVect(x,y+1,n); GetLineVect(x+1,y+1,n);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::CodeLine(int x1,int y1,int x2,int y2)

{

wlog("Кодирование линии ["+IntToStr(x1)+","+IntToStr(h-1-y1)+"]-["+IntToStr(x2)+","+IntToStr(h-1-y2)+"]:");

if(abs(x1-x2)>abs(y1-y2)) // точек по x больше

{

wlog("Цикл по оси x. Точки линии:");

int x, y, xa=min(x1,x2), xb=max(x1,x2);

double k=double(y2-y1)/(x2-x1), b=y1-x1*k;

x=xa+1;

while(x
{

y=k*x+b;

if(linecode=="")

linecode+=IntToStr(x)+","+IntToStr(h-1-y);

else

linecode+=","+IntToStr(x)+","+IntToStr(h-1-y);

wlog(IntToStr(x)+","+IntToStr(h-1-y));

x+=1;

}

}

else // точек по y больше

{

wlog("Цикл по оси y. Точки линии:");

int x, y, ya=min(y1,y2), yb=max(y1,y2);

double k=double(x2-x1)/(y2-y1), b=x1-y1*k;

y=ya+1;

while(y
{

x=k*y+b;

if(linecode=="")

linecode+=IntToStr(x)+","+IntToStr(h-1-y);

else

linecode+=","+IntToStr(x)+","+IntToStr(h-1-y);

wlog(IntToStr(x)+","+IntToStr(h-1-y));

y+=1;

}

}

}

//---------------------------------------------------------------------------

TPoint __fastcall TfrmLineSeg::FindMatch(int x, int y)

{

int i,j;

TPoint p;

p.x=x;

p.y=y;

i=0; j=0;

while(j
{

while(i
{

if(apix[i][j][1]==apix[x][y][1] // если принадлежит той же линии

&& apix[i][j][2]==apix[x][y][2] // и принадлежит тому же сегменту

&& (i!=x || j!=y) // и это другая точка

)

{ // это искомая точка

p.x=i;

p.y=j;

}

i+=1;

} // while i

i=0; j+=1;

} // while j

return p;

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actMatchOutExecute(TObject *Sender)

{

int i,j,lineno,lnum;

sb1->SimplePanel=true; sb1->SimpleText="Вывод кода линий ...";

for(j=0;j
for(i=0;i
apix[i][j][3]=-1;

MemoOut->Clear();

lnum=0;

for(j=0;j
for(i=0;i
{

if( apix[i][j][1]>0// есть линия

&& apix[i][j][3]==-1 // и она не обработана

&& (NeigCount(i,j)==1 // точка является началом линии

|| apix[i][j][2]>0) // или узлом

)

{ // формируем код для этой линии

lineno=apix[i][j][1];

lnum+=1;

linecode="";

GetLineVect(i,j,lineno);

MemoOut->Lines->Add(IntToStr(lnum)+":"+linecode);

wlog(IntToStr(lnum)+"(line #"+IntToStr(lineno)+"):"+linecode);

}

}

sb1->SimpleText=""; sb1->SimplePanel=false;

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actOpenArrayExecute(TObject *Sender)

{

int i,j;

AnsiString s;

OpenDialog1->Title="Открыть массив точек";

OpenDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";

if(OpenDialog1->Execute())

{

sb1->SimplePanel=true; sb1->SimpleText="Открытие массива точек ...";

mArray->Lines->LoadFromFile(OpenDialog1->FileName);

try

{

w=StrToInt(mArray->Lines->Strings[0]);

h=StrToInt(mArray->Lines->Strings[1]);

if(w>0 & h>0)

{

Image1->Picture->Bitmap->Width=w;

Image1->Picture->Bitmap->Height=h;

Image1->Width=w;

Image1->Height=h;

Image1->Canvas->FillRect(Image1->ClientRect);

scb1->Enabled=true;

ZoomTo(zoom);

for(j=0;j
{

s=mArray->Lines->Strings[j+2];

for(i=0;i
{

apix[i][j][1]=apix[i][j][2]=apix[i][j][3]=-1;

if(s[i+1]=='1') // есть точка

{

apix[i][j][0]=1;

Image1->Canvas->Pixels[i][j]=c0;

}

else // нет точки

{

apix[i][j][0]=0;

Image1->Canvas->Pixels[i][j]=c1;

}

}

}

}

else

throw Exception("");

}

catch (...)

{

MessageBox(Handle,"Ошибка открытия массива", "ОШИБКА", MB_OK);

}

sb1->SimpleText=""; sb1->SimplePanel=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actSaveArrayExecute(TObject *Sender)

{

int i,j;

AnsiString s;

SaveDialog1->Filter="Файлы массивов точек (*.dat)|*.dat|Все файлы (*.*)|*.*";

SaveDialog1->DefaultExt="*.dat";

SaveDialog1->Title="Сохранить массив точек";

if(SaveDialog1->Execute())

{

sb1->SimplePanel=true; sb1->SimpleText="Запись массива точек ...";

mArray->Clear();

mArray->Lines->Add(IntToStr(w));

mArray->Lines->Add(IntToStr(h));

for(j=0;j
{

s="";

for(i=0;i
{

s+=apix[i][j][0]==1 ? '1' : '0';

}

mArray->Lines->Add(s);

}

mArray->Lines->SaveToFile(SaveDialog1->FileName);

sb1->SimpleText=""; sb1->SimplePanel=false;

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actOptionsExecute(TObject *Sender)

{

frmOptions->Label1->Font->Color=c5;

frmOptions->Label2->Font->Color=c2;

frmOptions->Label3->Font->Color=c3;

frmOptions->Label4->Font=MemoLog->Font;

frmOptions->Label5->Font=MemoOut->Font;

frmOptions->cbLogs->Checked=logs;

if(frmOptions->ShowModal()==mrOk)

{

try

{

c5=frmOptions->Label1->Font->Color;

c2=frmOptions->Label2->Font->Color;

c3=frmOptions->Label3->Font->Color;

MemoLog->Font=frmOptions->Label4->Font;

MemoOut->Font=frmOptions->Label5->Font;

logs=frmOptions->cbLogs->Checked;

}

catch (...)

{

MessageBox(Handle,"Неверно указано число", "Ошибка", MB_OK);

}

DrawGrid();

ShowInfo(-1,-1);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actSaveCodeExecute(TObject *Sender)

{

SaveDialog1->Filter="Файлы кодов линий (*.lsc)|*.lsc|Все файлы (*.*)|*.*";

SaveDialog1->DefaultExt="*.lsc";

SaveDialog1->Title="Сохранить коды линий";

if(SaveDialog1->Execute())

{

MemoOut->Lines->SaveToFile(SaveDialog1->FileName);

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::GetLineVect2(int x,int y,int n)

{

TPoint p;

if(apix[x][y][1]==n && apix[x][y][3]==-1) // принадлежит этой линии и не обработана в код

{

// обработка текущей точки

if (NeigCount(x,y)==1) // если конец линии

{ // обработка конца линии

if(nodescnt==0) // если не было найдено конечных точек

{

nodescnt+=1;

xs1=x; ys1=1; // первая координата

}

else if(nodescnt==1) // если уже имеется одна конечная точка

{

}

apix[x][y][3]=1;

xs1=x;

ys1=y;

nodescnt+=1;

}

else if(apix[x][y][2]>0) // если начинается узел

{

}

else // продолжение линии, продолжаем обработку

{

GetLineVect(x-1,y-1,n); GetLineVect(x,y-1,n); GetLineVect(x+1,y-1,n);

GetLineVect(x-1,y ,n); GetLineVect(x+1,y ,n);

GetLineVect(x-1,y+1,n); GetLineVect(x,y+1,n); GetLineVect(x+1,y+1,n);

}

}

}

//---------------------------------------------------------------------------

void __fastcall TfrmLineSeg::actSegCodeOutExecute(TObject *Sender)

{

int i,j,lineno,lnum;

sb1->SimplePanel=true; sb1->SimpleText="Вывод кода сегментов ...";

for(j=0;j
for(i=0;i
apix[i][j][3]=-1;

MemoOut->Clear();

lnum=0;

for(j=0;j
for(i=0;i
{

if( apix[i][j][1]>0 // есть сегмент

&& apix[i][j][3]==-1 // и он не обработан

&& (NeigCount(i,j)==1 // точка является началом сегмента

|| NeigCount(i,j)==2) // или продолжением сегмента

)

{ // формируем код для этой линии

xs1=ys1=xs2=ys2=xs3=ys3=-1;

nodescnt=0;

lineno=apix[i][j][1];

lnum+=1;

linecode="";

GetLineVect2(i,j,lineno);

MemoOut->Lines->Add(IntToStr(lnum)+":"+linecode);

wlog(IntToStr(lnum)+"(line #"+IntToStr(lineno)+"):"+linecode);

}

}

sb1->SimpleText=""; sb1->SimplePanel=false;

}

//---------------------------------------------------------------------------


^ П.3.3. Текст модуля lsimgsize.h


//---------------------------------------------------------------------------

#ifndef lsImgSizeH

#define lsImgSizeH

//---------------------------------------------------------------------------

#include

#include

#include

#include

//---------------------------------------------------------------------------

class TfrmImgSize : public TForm

{

__published: // IDE-managed Components

TButton *btnOK;

TButton *btnCancel;

TEdit *edtWidth;

TEdit *edtHeight;

TLabel *Label1;

TLabel *Label2;

void __fastcall btnCancelClick(TObject *Sender);

private:// User declarations

public:// User declarations

__fastcall TfrmImgSize(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TfrmImgSize *frmImgSize;

//---------------------------------------------------------------------------

#endif


^ П.3.4. Текст модуля lsimgsize.cpp


//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "LineSeg.h"

#include "lsImgSize.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TfrmImgSize *frmImgSize;

//---------------------------------------------------------------------------

__fastcall TfrmImgSize::TfrmImgSize(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TfrmImgSize::btnCancelClick(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------


^ П.3.5. Текст модуля lsoptions.h


//---------------------------------------------------------------------------

#ifndef lsOptionsH

#define lsOptionsH

//---------------------------------------------------------------------------

#include

#include

#include

#include

#include

//---------------------------------------------------------------------------

class TfrmOptions : public TForm

{

__published:// IDE-managed Components

TButton *btnOk;

TButton *btnCancel;

TColorDialog *ColorDialog1;

TFontDialog *FontDialog1;

TCheckBox *cbLogs;

TGroupBox *gbColors;

TLabel *Label1;

TLabel *Label2;

TLabel *Label3;

TGroupBox *gbFonts;

TLabel *Label4;

TLabel *Label5;

void __fastcall btnCancelClick(TObject *Sender);

void __fastcall Label1MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall Label2MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall Label3MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall Label4MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

void __fastcall Label5MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y);

private:// User declarations

public:// User declarations

__fastcall TfrmOptions(TComponent* Owner);

};

//---------------------------------------------------------------------------

extern PACKAGE TfrmOptions *frmOptions;

//---------------------------------------------------------------------------

#endif


^ П.3.6. Текст модуля lsoptions.cpp


//---------------------------------------------------------------------------

#include

#pragma hdrstop

#include "lsOptions.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TfrmOptions *frmOptions;

//---------------------------------------------------------------------------

__fastcall TfrmOptions::TfrmOptions(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::btnCancelClick(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::Label1MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

ColorDialog1->Color=Label1->Font->Color;

if(ColorDialog1->Execute())

Label1->Font->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::Label2MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

ColorDialog1->Color=Label2->Font->Color;

if(ColorDialog1->Execute())

Label2->Font->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::Label3MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

ColorDialog1->Color=Label3->Font->Color;

if(ColorDialog1->Execute())

Label3->Font->Color=ColorDialog1->Color;

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::Label4MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

FontDialog1->Font=Label4->Font;

if(FontDialog1->Execute())

Label4->Font=FontDialog1->Font;

}

//---------------------------------------------------------------------------

void __fastcall TfrmOptions::Label5MouseDown(TObject *Sender,

TMouseButton Button, TShiftState Shift, int X, int Y)

{

FontDialog1->Font=Label5->Font;

if(FontDialog1->Execute())

Label5->Font=FontDialog1->Font;

}

//---------------------------------------------------------------------------


^ П.3.7. Текст модуля prjlineseg.cpp


//---------------------------------------------------------------------------

#include

#pragma hdrstop

//---------------------------------------------------------------------------

USEFORM("LineSeg.cpp", frmLineSeg);

USEFORM("lsImgSize.cpp", frmImgSize);

USEFORM("lsOptions.cpp", frmOptions);

//---------------------------------------------------------------------------

WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)

{

try

{

Application->Initialize();

Application->Title = "Линейная сегментация";

Application->CreateForm(__classid(TfrmLineSeg), &frmLineSeg);

Application->CreateForm(__classid(TfrmImgSize), &frmImgSize);

Application->CreateForm(__classid(TfrmOptions), &frmOptions);

Application->Run();

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

catch (...)

{

try

{

throw Exception("");

}

catch (Exception &exception)

{

Application->ShowException(&exception);

}

}

return 0;

}

//---------------------------------------------------------------------------

1   ...   13   14   15   16   17   18   19   20   21



Схожі:




База даних захищена авторським правом ©lib.exdat.com
При копіюванні матеріалу обов'язкове зазначення активного посилання відкритою для індексації.
звернутися до адміністрації