Рефераты. Исполняемое Win32 приложение

#endif

#ifndef MAX

# define MAX(x,y) ( (x) > (y) ? (x) : (y) )

#endif

#ifndef MIN

# define MIN(x,y) ( (x) < (y) ? (x) : (y) )

#endif

CFuzzy_ fuzzy;

double *param, x, y=0, kX=1000, _par=0;

int WIDTH, HEIGHT;

byte function=0;

const byte TRIANGLE = 1;

const byte TRAPEZOID = 2;

const byte GAUSSIAN = 3;

const byte GAUSSIAN2 = 4;

const byte SIGMOID = 5;

/////////////////////////////////////////////////////////////////////////////

// CFuzzyDlg dialog

CFuzzyDlg::CFuzzyDlg(CWnd* pParent /*=NULL*/)

: CDialog(CFuzzyDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CFuzzyDlg)

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32

m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CFuzzyDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CFuzzyDlg)

DDX_Control(pDX, IDC_EDITD, par_d);

DDX_Control(pDX, IDC_EDITC, par_c);

DDX_Control(pDX, IDC_EDITB, par_b);

DDX_Control(pDX, IDC_EDITA, par_a);

DDX_Control(pDX, IDC_GRAPHO, m_grapho);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CFuzzyDlg, CDialog)

//{{AFX_MSG_MAP(CFuzzyDlg)

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_BUTTON1, OnButton1)

ON_WM_MOUSEMOVE()

ON_BN_CLICKED(IDC_RADIO1, OnRadio1)

ON_BN_CLICKED(IDC_RADIO2, OnRadio2)

ON_BN_CLICKED(IDC_RADIO3, OnRadio3)

ON_BN_CLICKED(IDC_RADIO4, OnRadio4)

ON_BN_CLICKED(IDC_RADIO5, OnRadio5)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CFuzzyDlg message handlers

BOOL CFuzzyDlg::OnInitDialog()

{

CDialog::OnInitDialog();

SetIcon(m_hIcon, TRUE);// Set big icon

SetIcon(m_hIcon, FALSE);

par_a.SetWindowText("1");

par_b.SetWindowText("3");

par_c.SetWindowText("5");

par_d.SetWindowText("9");

R_Tri=(CButton*)GetDlgItem(IDC_RADIO1);

R_Tra=(CButton*)GetDlgItem(IDC_RADIO2);

R_Ga=(CButton*)GetDlgItem(IDC_RADIO3);

R_Ga2=(CButton*)GetDlgItem(IDC_RADIO4);

R_Sig=(CButton*)GetDlgItem(IDC_RADIO5);

param = new double[3];

WIDTH = 600;

HEIGHT = 400;

// Set small icon

return TRUE; // return TRUE unless you set the focus to a control

}

// If you add a minimize button to your dialog, you will need the code below

// to draw the icon. For MFC applications using the document/view model,

// this is automatically done for you by the framework.

void CFuzzyDlg::OnPaint()

{

CDialog::OnPaint();

Axis();

if (function==GAUSSIAN)

PlotGaussian();

else

if (function==TRIANGLE)

PlotTriangle();

else

if (function==TRAPEZOID)

PlotTrapezoid();

else

if (function==GAUSSIAN2)

PlotGaussian2();

else

if (function==SIGMOID)

PlotSigmoid();

}

// The system calls this to obtain the cursor to display while the user drags

// the minimized window.

HCURSOR CFuzzyDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CFuzzyDlg::OnButton1()

{

Axis();

if (R_Tri->GetState()==1)

{

PlotTriangle();

} else

if (R_Tra->GetState()==1)

{

PlotTrapezoid();

} else

if (R_Ga->GetState()==1)

{

PlotGaussian();

}

else

if (R_Ga2->GetState()==1)

{

PlotGaussian2();

} else

if (R_Sig->GetState()==1)

{

PlotSigmoid();

}

else AfxMessageBox("Выберите тип функции!!", MB_ICONWARNING|MB_OK, 0);

}

void CFuzzyDlg::OnMouseMove(UINT nFlags, CPoint point)

{

if (point.x>10 && point.x<WIDTH && point.y>10 && point.y<HEIGHT)

font->CreateFont(14, 10, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,

CDialog::OnMouseMove(nFlags, point);

}

void CFuzzyDlg::OnRadio1()

{

par_d.EnableWindow(false);

}

void CFuzzyDlg::OnRadio2()

{

par_c.EnableWindow(true);

par_d.EnableWindow(true);

}

void CFuzzyDlg::OnRadio3()

{

par_c.EnableWindow(false);

par_d.EnableWindow(false);

}

void CFuzzyDlg::OnRadio4()

{

par_c.EnableWindow(true);

par_d.EnableWindow(true);

}

void CFuzzyDlg::OnRadio5()

{

par_c.EnableWindow(false);

par_d.EnableWindow(false);

}

void CFuzzyDlg::Axis()

{

CDC *_dc = m_grapho.GetDC();

CPen DotPen;

DotPen.CreatePen(PS_DOT,1,RGB(0,0,0));

CPen SolidPen;

SolidPen.CreatePen(PS_SOLID,1,RGB(0,0,0));

CBrush brush;

brush.CreateSolidBrush(RGB(255,255,255));

_dc->SelectObject(brush);

_dc->Rectangle(0,0,WIDTH, HEIGHT);

_dc->SelectObject(SolidPen);

_dc->MoveTo(25,10);

_dc->LineTo(25, HEIGHT-40);

_dc->MoveTo(20,HEIGHT-40);

_dc->LineTo(WIDTH-20, HEIGHT-40);

_dc->SelectObject(DotPen);;

CFont *font = new CFont();

font->CreateFont(12, 7, 0, 0, FW_NORMAL, 0, 0, 0, ANSI_CHARSET, OUT_DEFAULT_PRECIS,

CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY, DEFAULT_PITCH | FF_SWISS, "Courier");

_dc->SelectObject(font);

_dc->TextOut(1,360-5,CString(" 0"));

for (int q=1;q<=10;q++)

{

_dc->MoveTo(20,360-q*32);

_dc->LineTo(580,360-q*32);

char iY[5];

gcvt(q*0.1,2,iY);

(q!=10)?_dc->TextOut(1,360-q*32-5,iY,3):_dc->TextOut(1,360-q*32-5,CString(" 1"));

}

_dc->TextOut(580,360,"x");

}

void CFuzzyDlg::PlotTriangle()

{

function=TRIANGLE;

CDC *dc = m_grapho.GetDC();

double tmp;

CString par_tmp;

par_a.GetWindowText(par_tmp);

param[0]=atof(par_tmp);

par_b.GetWindowText(par_tmp);

param[1]=atof(par_tmp);

par_c.GetWindowText(par_tmp);

param[2]=atof(par_tmp);

kX = 520000/ABS(param[2]-param[0]);

_par=param[0];

for (x=param[0];x<param[2];x+=ABS(param[2]-param[0])/8000)

{

tmp = fuzzy.fisTriangleMf(x,param);

tmp*=320;

dc->SetPixel((int)(((x)-param[0])*kX/1000+25),HEIGHT-40-(int)tmp, RGB(255,100,120));

}

dc->Rectangle((int)((param[0]-param[0])*kX/1000+25-4),HEIGHT-40-0*320-4,

(int)((param[0]-param[0])*kX/1000+25+4),HEIGHT-40-0*320+4);

dc->Rectangle((int)((param[1]-param[0])*kX/1000+25-4),HEIGHT-40-1*320-4,

(int)((param[1]-param[0])*kX/1000+25+4),HEIGHT-40-1*320+4);

dc->Rectangle((int)((param[2]-param[0])*kX/1000+25-4),HEIGHT-40-0*320-4,

(int)((param[2]-param[0])*kX/1000+25+4),HEIGHT-40-0*320+4);

}

void CFuzzyDlg::PlotTrapezoid()

{

function=TRAPEZOID;

CDC *dc = m_grapho.GetDC();

double tmp;

CString par_tmp;

par_a.GetWindowText(par_tmp);

param[0]=atof(par_tmp);

par_b.GetWindowText(par_tmp);

param[1]=atof(par_tmp);

par_c.GetWindowText(par_tmp);

param[2]=atof(par_tmp);

par_d.GetWindowText(par_tmp);

param[3]=atof(par_tmp);

kX = 520000/ABS(param[3]-param[0]);

_par=param[0];

for (x=param[0];x<param[3];x+=ABS(param[3]-param[0])/8000)

{

tmp = fuzzy.fisTrapezoidMf(x,param);

tmp*=320;

dc->SetPixel((int)(((x-param[0]))*kX/1000+25),HEIGHT-40-(int)tmp, RGB(255,100,100));

}

dc->Rectangle((int)((param[0]-param[0])*kX/1000+25-4),HEIGHT-40-0*320-4,

(int)((param[0]-param[0])*kX/1000+25+4),HEIGHT-40-0*320+4);

dc->Rectangle((int)((param[1]-param[0])*kX/1000+25-4),HEIGHT-40-1*320-4,

(int)((param[1]-param[0])*kX/1000+25+4),HEIGHT-40-1*320+4);

dc->Rectangle((int)((param[2]-param[0])*kX/1000+25-4),HEIGHT-40-1*320-4,

(int)((param[2]-param[0])*kX/1000+25+4),HEIGHT-40-1*320+4);

dc->Rectangle((int)((param[3]-param[0])*kX/1000+25-4),HEIGHT-40-0*320-4,

(int)((param[3]-param[0])*kX/1000+25+4),HEIGHT-40-0*320+4);

}

void CFuzzyDlg::PlotGaussian()

{

function=GAUSSIAN;

CDC *dc = m_grapho.GetDC();

double tmp;

CString par_tmp;

par_a.GetWindowText(par_tmp);

param[0]=atof(par_tmp);

par_b.GetWindowText(par_tmp);

param[1]=atof(par_tmp);

par_c.GetWindowText(par_tmp);

param[2]=atof(par_tmp);

par_d.GetWindowText(par_tmp);

param[3]=atof(par_tmp);

double _0=param[1];

do

{

tmp = fuzzy.fisGaussianMf(_0,param);

_0-=ABS(param[1])/1000;

}

while (tmp>=0.001);

kX = 520000/(2*ABS(param[1]-_0));

_par = _0;

for (x=_0;x<(param[1]+ABS(param[1]-_0));x+=ABS((param[1]+ABS(param[1]-_0))-_0)/8000)

{

tmp = fuzzy.fisGaussianMf(x,param);

tmp*=320;

dc->SetPixel((int)(((x)-_0)*kX/1000+25),HEIGHT-40-(int)tmp, RGB(255,100,100));

}

dc->Rectangle((int)((param[1]-_0)*kX/1000+25-4),HEIGHT-40-1*320-4,

(int)((param[1]-_0)*kX/1000+25+4),HEIGHT-40-1*320+4);

}

void CFuzzyDlg::PlotGaussian2()

{

function=GAUSSIAN2;

CDC *dc = m_grapho.GetDC();

double tmp;

CString par_tmp;

par_a.GetWindowText(par_tmp);

param[0]=atof(par_tmp);

par_b.GetWindowText(par_tmp);

param[1]=atof(par_tmp);

par_c.GetWindowText(par_tmp);

param[2]=atof(par_tmp);

par_d.GetWindowText(par_tmp);

param[3]=atof(par_tmp);

double _0=MIN(param[1], param[3]);

do

{

tmp = fuzzy.fisGaussian2Mf(_0,param);

_0-=ABS(MIN(param[1], param[3]))/10000;

}

while (tmp>=0.001);

kX = 520000/(ABS(MAX(param[1], param[3])-_0));

_par = _0;

for (x=_0;x<=MAX(param[1], param[3]);x+=ABS((MAX(param[1], param[3])-_0))/10000)

{

tmp = fuzzy.fisGaussian2Mf(x,param);

tmp*=320;

dc->SetPixel((int)(((x)-_0)*kX/1000+25),HEIGHT-40-(int)tmp, RGB(255,100,100));

}

dc->Rectangle((int)((MAX(param[1], param[3])-_0)*kX/1000+25-4),HEIGHT-40-1*320-4,

(int)((MAX(param[1], param[3])-_0)*kX/1000+25+4),HEIGHT-40-1*320+4);

}

void CFuzzyDlg::PlotSigmoid()

{

function=SIGMOID;

CDC *dc = m_grapho.GetDC();

double tmp;

CString par_tmp;

par_a.GetWindowText(par_tmp);

param[0]=atof(par_tmp);

par_b.GetWindowText(par_tmp);

param[1]=atof(par_tmp);

par_c.GetWindowText(par_tmp);

param[2]=atof(par_tmp);

par_d.GetWindowText(par_tmp);

param[3]=atof(par_tmp);

double _0=param[1],_1=param[1];

do

{

tmp = fuzzy.fisSigmoidMf(_0,param);

_0-=param[1]*0.0001;

}

while (tmp>=0.0001);

do

{

tmp = fuzzy.fisSigmoidMf(_1,param);

_1+=param[1]*0.0001;

}

while(tmp<0.99999);

kX = 520000/(ABS(_1-_0));

_par = _0;

for (x=_0;x<=_1;x+=ABS(param[1]*0.0001))

{

tmp = fuzzy.fisSigmoidMf(x,param);

tmp*=320;

dc->SetPixel((int)(((x)-_0)*kX/1000+25),HEIGHT-40-(int)tmp, RGB(255,100,100));

}

dc->Rectangle((int)((param[1]-_0)*kX/1000+25-4),(int)(HEIGHT-40-0.5*320-4),(int)((param[1]-_0)*kX/1000+25+4),(int)(HEIGHT-40-0.5*320+4));

}

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



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.