混沌ICON圖標(biāo)繪制_第1頁
混沌ICON圖標(biāo)繪制_第2頁
混沌ICON圖標(biāo)繪制_第3頁
混沌ICON圖標(biāo)繪制_第4頁
混沌ICON圖標(biāo)繪制_第5頁
已閱讀5頁,還剩8頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)三一上機(jī)題目:實(shí)現(xiàn)ICON圖標(biāo)繪制二上機(jī)目的與要求理解平面與屏幕的對(duì)應(yīng)關(guān)系,掌握吸引子的構(gòu)造原理與色帶(colorband)的制作方法。熟悉ICON圖標(biāo)的兩個(gè)計(jì)算公式,能夠用計(jì)算機(jī)生成多幅且有不同對(duì)稱形式的ICON圖標(biāo)檔案。三思路及步驟生成圖標(biāo)對(duì)稱最基本的公式如下:F(z)=[入+azz+BRe(zn)+3i]z+Yzn-1其中入a0s是實(shí)參,當(dāng)s二0時(shí)該公式具有Dn對(duì)稱,當(dāng)w#0時(shí),該公式具有Zn對(duì)稱。利用編程語言實(shí)現(xiàn)平面上的點(diǎn)與屏幕像素坐標(biāo)的對(duì)應(yīng)函數(shù),自定義調(diào)色板和色帶分配的函數(shù),編程實(shí)現(xiàn)點(diǎn)擊次數(shù)累加器函數(shù)。運(yùn)用計(jì)算機(jī)語言寫出ICON圖標(biāo)的計(jì)算公式,形成迭代函數(shù),寫出主函數(shù),實(shí)行聯(lián)調(diào)。利用AppendixA中的參數(shù)表中的參數(shù),生成多幅ICON吸引子圖形,進(jìn)行簡(jiǎn)單調(diào)色,存圖。在VC6.0中新建一個(gè)工程ICON,建立對(duì)話框。再打開菜單,選Project——AddProject,新建一個(gè)C頭文件,起名為Variable.h。在Variable.h文件里定義調(diào)色板,需要迭代到的顏色定義在COLORREFcolorlist[]結(jié)構(gòu)體里。以函數(shù)fxynew(),利用生成圖標(biāo)對(duì)稱的基本公式,計(jì)算迭代后新的x與y的值,分別賦給xnew和ynew,之后計(jì)算x點(diǎn)y點(diǎn)對(duì)應(yīng)的坐標(biāo),并計(jì)算點(diǎn)擊次數(shù),擊中一次加1,再根據(jù)點(diǎn)擊次數(shù)著色。在ICONDlg.cpp里引用此頭文件。在ICON的對(duì)話框窗體里添加按鈕“繪制吸引子”,“保存”,“退出”,編輯框“顯示比例”,參數(shù)a,8,y,s,入,以及“迭代次數(shù)”,“對(duì)稱維數(shù)”。為編輯框添加相應(yīng)的成員變量,實(shí)現(xiàn)通過調(diào)整參數(shù),可以繪制出不同對(duì)稱圖形,并能調(diào)整輸出比例的功能。a,8,y,s,入等變量的初始值如下圖(Emperor'sCloak):CIconDlg::CIconDlg(CWnd*pParent/*=NULL*/):CDialog(CIconDlg::IDD,pParent){//{<AFX_DATA_INIT(CIconDlg)n_a=1.806;n_b=0.0;nr=1.0;=0.0;n_y=-1.806;nscale=1.5;n_n=1500000;n_sd=5;//}}AFX_DfiTfi_INIT//NotethatLoadicondoesnotrequireasubsequentDestroyIconinWin32mhlcon=AfxGetApp()->LoadIcon(IDRJIfiINFRAME);點(diǎn)擊“繪制吸引子”,在對(duì)話框里繪制一個(gè)767*767的白色繪圖區(qū)域,起始繪制點(diǎn)為(-0.234,-0.12345)。以函數(shù)fxynew(x1,y1,m_a,m_b,m_r,m_w,m_y,m_sd)獲取輸入的參數(shù),生成的圖形控制在(0,0),(768,768)區(qū)域中,每迭代一次,在當(dāng)前x,y坐標(biāo)添加一次colorlist里的顏色。迭代完成后,輸出“繪圖完畢,可以將圖片保存”字樣。保存圖片:可將白色區(qū)域里的圖片保存為768*768的bmp圖片。相關(guān)代碼:ICONDlg.cpp:CIconDlg::CIconDlg(CWnd*pParent/*=NULL*/):CDialog(CIconDlg::IDD,pParent)(//{{AFX_DATA_INIT(CIconDlg)/*m_a=5.0;m_b=1.5;m_r=1.0;m_w=0.0;m_y=-2.7;*//*m_a=1.0;m_b=-0.1;m_r=0.167;m_w=0.0;m_y=-2.08;*//*m_a=-1.0;m_b=0.1;m_r=-0.82;m_w=0.12;m_y=1.56;*//*m_a=1.806;m_b=0.0;m_r=1.0;m_w=0.0;m_y=-1.806;*//*m_a=2.0;m_b=0.0;m_r=1.0;m_w=0.1;m_y=-1.86;*//*m_a=-1.0;m_b=0.1;m_r=-0.82;m_w=0.12;m_y=1.56;*/m_a=-1.0;m_b=0.1;m_r=-0.805;m_w=0.0;m_y=1.5;m_scale=1.0;m_n=1500000;m_sd=3;//}}AFX_DATA_INIT//NotethatLoadIcondoesnotrequireasubsequentDestroyIconinWin32m_hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME);}voidCIconDlg::DoDataExchange(CDataExchange*pDX)(CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(CIconDlg)DDX_Text(pDX,IDC_a,m_a);DDX_Text(pDX,IDC_b,m_b);DDX_Text(pDX,IDC_n,m_n);DDX_Text(pDX,IDC_r,m_r);DDX_Text(pDX,IDC_sd,m_sd);DDX_Text(pDX,IDC_w,m_w);DDX_Text(pDX,IDC_y,m_y);DDX_Text(pDX,IDC_EDIT1,m_scale);//}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(CIconDlg,CDialog)//{{AFX_MSG_MAP(CIconDlg)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(ID_OnButtonCreate,OnOnButtonCreate)ON_BN_CLICKED(ID_OnButtonCreate2,OnSave)//}}AFX_MSG_MAPEND_MESSAGE_MAP()///////////////////////////////////////////////////////////////////////////////CIconDlgmessagehandlersBOOLCIconDlg::OnInitDialog(){CDialog::OnInitDialog();MoveWindow(0,0,1024,768,true);//Add"About..."menuitemtosystemmenu.//IDM_ABOUTBOXmustbeinthesystemcommandrange.ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX<0xF000);CMenu*pSysMenu=GetSystemMenu(FALSE);if(pSysMenu!=NULL){CStringstrAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if(!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}//SettheiconforthisdThloframeworkdoesthisautomatically//whentheapplication'smainwindowisnotadialogSetIcon(m_hIcon,TRUE); //SetbigiconSetIcon(m_hIcon,FALSE);//Setsmalliconthis->MoveWindow(0,0,1024,768,true)//將窗口設(shè)成1024*768大小//TODO:AddextrainitializationherereturnTRUE;//returnTRUEunlessyousetthefocustoacontrol}voidCIconDlg::OnSysCommand(UINTnID,LPARAMlParam){if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID,lParam);}

//Ifyouaddaminimizebuttontoyourdialog,youwillneedthecodebelow//todrawtheicon.ForMFCapplicationsusingthedocument/viewmodel,//thisisautomaticallydoneforyoubytheframework.voidCIconDlg::OnPaint()(if(IsIconic())(CPaintDCdc(this);//devicecontextforpaintingSendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);//CentericoninclientrectangleintcxIcon=GetSystemMetrics(SM_CXICON);intcyIcon=GetSystemMetrics(SM_CYICON);CRectrect;GetClientRect(&rect);intx=(rect.Width()-cxIcon+1)/2;inty=(rect.Height()-cyIcon+1)/2;//Drawtheicondc.DrawIcon(x,y,m_hIcon);}else(CDialog::OnPaint();}/*將作圖區(qū)域底色設(shè)為白色/*將作圖區(qū)域底色設(shè)為白色*/CRectrec;rec.left=0;rec.top=0;rec.right=767;rec.bottom=767;CDC*dc;dc=this->GetDC();CBrushhbr;hbr.CreateSolidBrush(RGB(0,0,0));dc->FillRect(&rec,&hbr);}//Thesystemcallsthistoobtainthecursortodisplaywhiletheuserdrags//theminimizedwindow.HCURSORCIconDlg::OnQueryDragIcon()(return(HCURSOR)m_hIcon;}voidCIconDlg::OnOnButtonCreate()(//TODO:AddyourcontrolnotificationhandlercodehereUpdateData(TRUE);CDC*dc;dc=this->GetDC();intlongnum;doublex0,y0,x1,y1;intmcount,mcolor,colx,rowy;x0=-0.19820101;y0=0.19830725; 〃定義起始點(diǎn)scale=m_scale;x1=x0;y1=y0;CRectrec;rec.left=0;rec.top=0;rec.right=768;rec.bottom=768;CBrushhbr;hbr?CreateSolidBrush(RGB(255,255,255));dc->FillRect(&rec,&hbr);for(num=0;num<m_n;num++)(fxynew(x1,y1,m_a,m_b,m_r,m_w,m_y,m_sd);x1=xnew;y1=ynew;colx=(int)fcol(x1);//,m_scalerowy=(int)frow(y1);//,m_scaleif(colx>=0&&colx<768&&rowy<768&&rowy>=0){if(num<1000){〃去除瞬態(tài)}else{mcount=add(colx,rowy);mcolor=color(mcount);dc->SetPixel(colx,rowy,RGB(144,97,229));//dc->SetPixel(colx,rowy,colorlist[128-mcolor]);}}}dc->TextOut(10+650+2+100,85-10-15,"****************");dc->TextOut(10+650+2+100,85-15,"*作圖結(jié)束*");dc->TextOut(10+650+2+100,85+10-15,"*");dc->TextOut(10+650+2+90,85+10-15,"*");dc->TextOut(10+650+2+100,85+20-15,"****************");//+100//UpdateData(FALSE);}voidCIconDlg::OnSave(){intx1,x2,y1,y2;inti,j,flag;BYTEr,g,b;COLORREFclr;CClientDCdc(this);flag=0;for(i=0;i<768;i++){for(j=0;j<768;j++){clr=dc.GetPixel(i,j);r=GetRValue(clr);g=GetGValue(clr);b=GetBValue(clr);if(r!=255||g!=255||b!=255){flag=1;x1=i;break;}}if(flag)break;}flag=0;for(i=767;i>=0;i--){for(j=767;j>=0;j--){clr=dc.GetPixel(i,j);r=GetRValue(clr);g=GetGValue(clr);b=GetBValue(clr);if(r!=255||g!=255||b!=255){flag=1;x2=i;break;}}if(flag)break;}flag=0;for(j=0;j<768;j++){for(i=x1;i<=x2;i++){clr=dc.GetPixel(i,j);r=GetRValue(clr);g=GetGValue(clr);b=GetBValue(clr);if(r!=255||g!=255||b!=255){flag=1;y1=j;break;)}if(flag)break;}flag=0;for(j=767;j>=0;j--)(for(i=x2;i>=x1;i--)(clr=dc.GetPixel(i,j);r=GetRValue(clr);g=GetGValue(clr);b=GetBValue(clr);if(r!=255||g!=255||b!=255){flag=1;y2=j;break;}}if(flag)break;}〃保存圖片CRect rect;rect.SetRect(x1,y1,x2,y2);// CClientDCdc(this);CDC memDC;// CRect rect;memDC.CreateCompatibleDC(&dc);CBitmapbm;intWidth=768;intHeight=768;bm.CreateCompatibleBitmap(&dc,Width,Height);CBitmap*pOld=memDC.SelectObject(&bm);memDC.BitBlt(0,0,Width,Height,&dc,0,0,SRCCOPY);memDC.SelectObject(pOld);BITMAPbtm;bm.GetBitmap(&btm);DWORDsize=btm.bmWidthBytes*btm.bmHeight;LPSTRlpData=(LPSTR)GlobalAllocPtr(GPTR,size);BITMAPFILEHEADERbfh;/////////////////////////////////////////////BITMAPINFOHEADERbih;bih.biBitCount=btm.bmBitsPixel;bih.biClrImportant=0;bih.biClrUsed=0;bih.biCompression=0;bih.biHeight=btm.bmHeight;bih.biPlanes=1;bih.biSize=sizeof(BITMAPINFOHEADER);bih.biSizeImage=size;bih.biWidth=btm.bmWidth;bih.biXPelsPerMeter=0;bih.biYPelsPerMeter=0;GetDIBits(dc,bm,0,bih?biHeight,lpData,(BITMAPINFO*)&bih,DIB_RGB_COLORS);//bm.GetBitmapBits(size,lpData);//此函數(shù)在處理5-5-5模式的16位色下會(huì)出現(xiàn)顏色混亂bfh.bfReservedl=bfh.bfReserved2=0;bfh.bfType=((WORD)('M'<<8)|'B');bfh.bfSize=54+size;bfh.bfOffBits=54;CFileDialog dlg(false,_T("BMP"),_T("*.bmp"),OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,_T("*.bmp|*.bmp|*.*|*.*|"));if(dlg.DoModal()!=IDOK)return;CFilebf;CStringss=dlg.GetPathName();if(bf.Open(ss,CFile::modeCreate|CFile::modeWrite))(bf.WriteHuge(&bfh,sizeof(BITMAPFILEHEADER));bf.WriteHuge(&bih,sizeof(BITMAPINFOHEADER));bf.WriteHuge(lpData,size);bf.Close();AfxMessageBox("保存成功");}GlobalFreePtr(lpData);}Variable.h:doublescale;//=1.25決定了圖形的顯示范圍doubleynew;doublexnew;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論