版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
會(huì)計(jì)學(xué)1C語言課程設(shè)計(jì)圖形操作簡(jiǎn)介必要的頭文件必須的系統(tǒng)變量初始化圖形界面初始化出錯(cuò)處理取得必須的信息關(guān)閉圖形界面一些常用的畫圖函數(shù)第1頁(yè)/共87頁(yè)必要的頭文件#include<dos.h>#include<conio.h>#include<stdio.h>#include<stdlib.h>#include<graphics.h>第2頁(yè)/共87頁(yè)初始化圖形界面GraphDriver=DETECT;initgraph(&GraphDriver,&GraphMode,"");
initgraph(&GraphDriver,&GraphMode,”c:\\turboc2");第3頁(yè)/共87頁(yè)初始化出錯(cuò)處理ErrorCode=graphresult(); if(ErrorCode!=grOk){printf("GraphicsSystemError:%s\n",grapherrormsg(ErrorCode));exit(1);}第4頁(yè)/共87頁(yè)取得必須的參數(shù)getpalette(&palette); MaxColors=getmaxcolor()+1; MaxX=getmaxx();MaxY=getmaxy(); AspectRatio=(double)xasp/(double)yasp;第5頁(yè)/共87頁(yè)關(guān)閉圖形界面closegraph(); /*Returnthesystemtotextmode*/第6頁(yè)/共87頁(yè)一些常用的畫圖函數(shù)outtext(buffer),outtextxy(x,y,buffer)line(x0,y0,x1,y1);linerel();lineto()circle(intx,inty,intradius);arc()bar(intl,intt,intr,intb);bar3d();moveto(intx,inty);moverel(dx,dy);getx()putpixel(x,y,color);getpixel(x,y)setcolor();setbkcolor();getcolor();getbkcolor第7頁(yè)/共87頁(yè)DOS下如何發(fā)聲在dos.h下,有如下三個(gè)函數(shù)可以處理聲音:sound(longfreq):發(fā)出特定頻率的聲音nosound():停止發(fā)聲delay():延時(shí)特定時(shí)間人能聽到的聲音頻率
大致在20
Hz至20000
Hz
之間第8頁(yè)/共87頁(yè)學(xué)習(xí)資料與方法C程序編程資料匯總圖書文獻(xiàn)資料查詢上網(wǎng)查詢借鑒它山之石第9頁(yè)/共87頁(yè)課題要求二人一組,自由組合。每組選一個(gè)題目,確定組長(zhǎng)。學(xué)委負(fù)責(zé)登記并提交。設(shè)計(jì)結(jié)束前進(jìn)行程序的運(yùn)行演示和講解,提交有詳盡的注釋的源程序和可執(zhí)行程序。提交開發(fā)文檔,說明程序的主要模塊及功能、主要數(shù)據(jù)結(jié)構(gòu)及意義、程序采用的核心算法及實(shí)現(xiàn)方式、小組成員的分工及完成情況。提交課程設(shè)計(jì)報(bào)告,參考模版。第10頁(yè)/共87頁(yè)1、文字編輯器:設(shè)計(jì)界面,實(shí)現(xiàn)中、英文字輸入,能實(shí)現(xiàn)新建、保存、中英文字切換等功能菜單。2、鍵盤電子琴:能通過鍵盤彈奏樂曲,通過PC喇叭播放音樂。能夠播放簡(jiǎn)單的WAV文件,支持鍵盤和鼠標(biāo)操作。主要應(yīng)用dos.h下的處理聲音的函數(shù)sound(longfreg)發(fā)出特定頻率的聲音;nosound()停止發(fā)音;delay()延時(shí)特定時(shí)間發(fā)音等函數(shù)來實(shí)現(xiàn)。參考題目第11頁(yè)/共87頁(yè)3、簡(jiǎn)易圖形編輯器:實(shí)現(xiàn)Windows下的畫筆工具的部分功能,能夠讀寫編輯位圖(BMP)文件。實(shí)現(xiàn)類似Photoshop濾鏡的部分功能,如銳化、模糊、凸出、扭曲、馬賽克等,能夠讀寫編輯位圖(BMP)文件。
4、黑白翻轉(zhuǎn)棋:二人對(duì)弈,系統(tǒng)判斷輸贏和禁手,具有計(jì)時(shí)和記分功能,保留紀(jì)錄,支持鼠標(biāo)和鍵盤操作,能悔棋。通過畫圖函數(shù)設(shè)定棋盤,設(shè)定二人對(duì)弈的有效范圍,通過鼠標(biāo)或鍵盤進(jìn)行對(duì)弈,根據(jù)一定的規(guī)則,判斷輸贏。5、五子棋:二人對(duì)弈,系統(tǒng)判斷輸贏和禁手,具有計(jì)時(shí)和記分功能,保留紀(jì)錄,支持鼠標(biāo)和鍵盤操作,能悔棋。通過畫圖函數(shù)設(shè)定棋盤,設(shè)定二人對(duì)弈的有效范圍,通過鼠標(biāo)或鍵盤進(jìn)行對(duì)弈,根據(jù)一定的規(guī)則,判斷輸贏。第12頁(yè)/共87頁(yè)6、跳棋:二人對(duì)弈,具有計(jì)時(shí)和記分功能,保留紀(jì)錄,支持鼠標(biāo)和鍵盤操作,能悔棋。7、中國(guó)象棋:二人對(duì)弈,具有計(jì)時(shí)和記分功能,系統(tǒng)判斷輸贏和禁手,支持鼠標(biāo)和鍵盤操作,能悔棋一步。8、俄羅斯方塊:可選擇難度,可記分,保留最高分紀(jì)錄,支持鍵盤和鼠標(biāo)操作。9、挖雷游戲:實(shí)現(xiàn)Windows下的挖雷游戲功能。第13頁(yè)/共87頁(yè)10、走迷宮:繪制和選擇迷宮地圖,系統(tǒng)能夠自動(dòng)尋找出口,支持鼠標(biāo)和鍵盤操作。通過畫圖函數(shù)設(shè)定迷宮,運(yùn)用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),利用一定的算法,實(shí)現(xiàn)單步找尋迷宮出口的操作。11、漢諾塔的動(dòng)態(tài)演示:自動(dòng)移動(dòng)盤子,要求能輸入塔盤的數(shù)量,支持鼠標(biāo)和鍵盤操作。運(yùn)用數(shù)據(jù)結(jié)構(gòu)的相關(guān)知識(shí),利用一定的算法,實(shí)現(xiàn)單步的動(dòng)態(tài)演示。12、華容道游戲:系統(tǒng)能夠自動(dòng)提示。要求用鼠標(biāo)拖動(dòng)并記錄時(shí)間,支持鼠標(biāo)和鍵盤操作。第14頁(yè)/共87頁(yè)注意事項(xiàng)規(guī)范化編程模塊化編程制定詳細(xì)的日程安排,并嚴(yán)格遵守合理分工,團(tuán)隊(duì)協(xié)作認(rèn)真完成開發(fā)文檔以及課程設(shè)計(jì)報(bào)告第15頁(yè)/共87頁(yè)鼠標(biāo)簡(jiǎn)介
鼠標(biāo)系統(tǒng)實(shí)際上由兩個(gè)主要元素組成:鼠標(biāo)機(jī)制和稱作鼠標(biāo)驅(qū)動(dòng)程序的內(nèi)存駐留程序。鼠標(biāo)驅(qū)動(dòng)程序提供與鼠標(biāo)通信所需的全部低級(jí)支持。此外,它自動(dòng)維持鼠標(biāo)光標(biāo)位置和發(fā)現(xiàn)是否按下了某個(gè)鍵。一旦裝入驅(qū)動(dòng)程序,鼠標(biāo)就可以被隨后執(zhí)行的任意程序使用。第16頁(yè)/共87頁(yè)鼠標(biāo)簡(jiǎn)介續(xù)
可以通過PC中斷33H訪問鼠標(biāo)和鼠標(biāo)驅(qū)動(dòng)程序的各種功能。所選擇的特定函數(shù)依賴于中斷時(shí)AX寄存器的值。三個(gè)其它寄存器(BX、CX和DX)用于把各種參數(shù)傳送給鼠標(biāo)例程。同樣,鼠標(biāo)函數(shù)使用這四個(gè)寄存器把鼠標(biāo)的位置和按鈕的狀態(tài)返回給調(diào)用函數(shù)。第17頁(yè)/共87頁(yè)鼠標(biāo)驅(qū)動(dòng)程序主要功能第18頁(yè)/共87頁(yè)鼠標(biāo)驅(qū)動(dòng)程序主要功能第19頁(yè)/共87頁(yè)鼠標(biāo)功能調(diào)用方法
用TC通過INT33H中斷來編制基本函數(shù),有三種常用方法:嵌入?yún)R編程序,如:ASMCLI清中斷利用全程變量賦予寄存器值,然后通過函數(shù)geninterrupt()調(diào)用中斷實(shí)現(xiàn)利用聯(lián)合類型REGS,SREGS通過函數(shù)int86(),int86x()調(diào)用中斷,原型在dos.h第20頁(yè)/共87頁(yè)鼠標(biāo)的初始化InitMouse(){unionREGSregs; regs.x.ax=0; int86(0x33,®s,®s); if(regs.x.ax==0) returnfalse; elsereturntrue;}第21頁(yè)/共87頁(yè)鼠標(biāo)光標(biāo)的隱藏HideCur(){unionREGSregs; if(visual){ regs.x.ax=2; int86(0x33,®s,®s); visual=false;}}第22頁(yè)/共87頁(yè)鼠標(biāo)光標(biāo)的顯示ShowCur(){unionREGSregs; if(!visual){ regs.x.ax=1; int86(0x33,®s,®s); visual=true;}}第23頁(yè)/共87頁(yè)鼠標(biāo)光標(biāo)的顯示與隱藏
在鼠標(biāo)驅(qū)動(dòng)程序中,鼠標(biāo)的顯示狀態(tài)用0值表示,隱藏用負(fù)值表示,每調(diào)用一次顯示功能則該值加一,每調(diào)用一次隱藏功能,則該值減一。這樣,在多次調(diào)用了驅(qū)動(dòng)程序的隱藏鼠標(biāo)光標(biāo)功能后,再調(diào)用顯示鼠標(biāo)光標(biāo)功能時(shí),將不能正常顯示鼠標(biāo)光標(biāo)。需要加入一個(gè)visual布爾型變量,來取代驅(qū)動(dòng)程序中的數(shù)值。第24頁(yè)/共87頁(yè)讀取鼠標(biāo)的狀態(tài)Status(){ unionREGSregs; regs.x.ax=3; int86(0x33,®s,®s); x=regs.x.cx;y=regs.x.dx; status=regs.x.bx;}第25頁(yè)/共87頁(yè)讀取鼠標(biāo)的狀態(tài)其中X,Y為光標(biāo)位置status&1左鍵狀態(tài),1為按下,0為未按status&2右鍵狀態(tài),1為按下,0為未按status&4中鍵狀態(tài),1為按下,0為未按要注意循環(huán)檢測(cè)時(shí)的抖動(dòng)現(xiàn)象,可增加一些空循環(huán)或延時(shí)來清除剩余的按鍵信號(hào)。第26頁(yè)/共87頁(yè)設(shè)置光標(biāo)位置voidMoveMouse(intx,inty){ REGSregs; regs.x.ax=4; regs.x.cx=x; regs.x.dx=y; int86(0x33,®s,®s);}第27頁(yè)/共87頁(yè)設(shè)置鼠標(biāo)光標(biāo)形狀設(shè)置鼠標(biāo)光標(biāo)需要三個(gè)方面信息:鼠標(biāo)的外邊界:8*8點(diǎn)陣,16個(gè)整數(shù)鼠標(biāo)的內(nèi)部形狀:8*8點(diǎn)陣,16個(gè)整數(shù)以及鼠標(biāo)的熱點(diǎn)的相對(duì)坐標(biāo):intx,y其中外邊界和內(nèi)邊界連續(xù)存放,為長(zhǎng)度為32的整型數(shù)組intmarks[32]第28頁(yè)/共87頁(yè)設(shè)置鼠標(biāo)光標(biāo)形狀SetCurs(unsignedmasks[32],x,y){ unionREGSregs; structSREGSsregs; regs.x.ax=9; regs.x.bx=x;regs.x.cx=y;/*hotspot*/ regs.x.dx=(unsigned)masks; segread(&sregs);int86(0x33,®s,®s);}第29頁(yè)/共87頁(yè)手的光標(biāo)數(shù)據(jù)
{0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,0xffff,/*cursormask*/0x0c00,0x1200,0x1200,0x1200,0x13fe,0x1249,0x1249,0x1249,0x7249,0x9001,0x9001,0x9001,0x8001,0x8001,0x4002,0x3ffc/*cursormask*/}{4,0}/*hotspot*/第30頁(yè)/共87頁(yè)設(shè)置鼠標(biāo)的移動(dòng)范圍SetMouseArea(intx0,inty0,intx1,inty1){ unionREGSregs; regs.x.ax=7;regs.x.cx=x0;regs.x.dx=x1; int86(0x33,®s;®s); regs.x.ax=8;regs.x.cx=y0;regs.x.dx=y1; int86(0x33,®s,®s);}第31頁(yè)/共87頁(yè)漢字庫(kù)簡(jiǎn)介
程序中可直接使用UCDOS中的HZK16,ASC16和HZK24三個(gè)文件。HZK16中存儲(chǔ)的是16*16點(diǎn)陣漢字是按行存儲(chǔ)的以便于顯示,每個(gè)漢字字模32BYTE,按照國(guó)標(biāo)碼順序存儲(chǔ),其中也包含了682個(gè)純中文符號(hào)字母。第32頁(yè)/共87頁(yè)漢字庫(kù)的情況ASC16存儲(chǔ)256個(gè)西文ASCII碼的8*16點(diǎn)陣格式,按行存儲(chǔ),每個(gè)ASCII碼16字節(jié)。HZK24X存儲(chǔ)24*24點(diǎn)陣打印字模,按列存儲(chǔ),每個(gè)漢字字模占576字節(jié)。24*24點(diǎn)陣漢字存儲(chǔ)兩比較大,所以從16區(qū)1位“啊”字開始存儲(chǔ),以減少字庫(kù)大小。其中X為KS表示楷體,宋體等。第33頁(yè)/共87頁(yè)取得字節(jié)某一位的值intgetbit(unsignedcharbyte,intbit){ if(bit<0||bit>7) return0; return(byte>>bit)&0x1;}函數(shù)getbit用于得出一個(gè)字節(jié)中每個(gè)位(bit)是0還是1。第34頁(yè)/共87頁(yè)顯示24點(diǎn)陣的漢字voidPutChn24(x,y,char*by,color){ inti1,i2,i3; for(i1=0;i1<24;i1++)//LINES for(i2=0;i2<3;i2++) //3bytesperline for(i3=0;i3<8;i3++) f(getbit(by[i1*3+i2],7-i3)) putpixel(x+i1,y+(i2*8+i3),color);}第35頁(yè)/共87頁(yè)顯示16點(diǎn)陣的漢字voidPutChn16(x,y,char*buf,color){ inti1,i2,i3; for(i1=0;i1<16;i1++) for(i2=0;i2<2;i2++) for(i3=0;i3<8;i3++) if(getbit(buf[i1*2+i2],7-i3)) putpixel(x+i2*8+i3,y+i1,color);}第36頁(yè)/共87頁(yè)在字庫(kù)中找字模qu=c1-0xa1;wei=c2-0xa1;通過計(jì)算個(gè)計(jì)算出該區(qū)位碼在漢字庫(kù)中的偏移量:lenth=32longoffset=((qu)*94+wei)*(long)lenth;24*24點(diǎn)陣漢字字模的讀取類似,只是其偏移量計(jì)算稍有不同:lenth=72longoffset=((qu-15)*94+wei)*(long)lenth;第37頁(yè)/共87頁(yè)良好的程序設(shè)計(jì)風(fēng)格全局變量用具有描述意義的名字,局部變量用短名字。函數(shù)采用動(dòng)作性的名字。保持一致性。
縮進(jìn)形式顯示程序結(jié)構(gòu),使用一致的縮行和加括號(hào)風(fēng)格。使用空行顯示模塊
充分而合理地使用程序注釋給函數(shù)和全局?jǐn)?shù)據(jù)加注釋。不要注釋不好的代碼,應(yīng)該重寫。不要與代碼矛盾。
友好的程序界面,程序界面的方便性及有效性
不要濫用語言技巧使用表達(dá)式的自然形式。利用括號(hào)排除歧義。分解復(fù)雜的表達(dá)式。當(dāng)心副作用,像++這一類運(yùn)算符具有副作用。程序的健壯性:容錯(cuò)
模塊化編程
第38頁(yè)/共87頁(yè)高級(jí)編程技術(shù)屏幕文本輸出圖形程序設(shè)計(jì)硬件驅(qū)動(dòng)鍵盤鼠標(biāo)輸入方法編程其它高級(jí)編程技術(shù)第39頁(yè)/共87頁(yè)一、屏幕文本輸出1.1文本方式的控制1.2窗口設(shè)置和文本輸出函數(shù)1.3清屏和光標(biāo)操作函數(shù)1.4屏幕文本移動(dòng)與存取函數(shù)1.5狀態(tài)查詢函數(shù)第40頁(yè)/共87頁(yè)1.1.1文本方式控制函數(shù)文本方式就是顯示文本的模式,它的顯示單位是字符而不是圖形方式下的象素,在屏幕上顯示字符的位置坐標(biāo)用行和列表示。缺省方式下,每屏為80列25行,TurboC規(guī)定屏的左上角為l行l(wèi)列,屏的右下角為25行80列。TurboC支持的文本顯示方式有5種,它們可以用文本顯示方式設(shè)置函數(shù)來進(jìn)行設(shè)置。第41頁(yè)/共87頁(yè)文本顯示方式設(shè)置函數(shù):
voidtextmode(intnewmode)其中newmode的值可分別為:0 40×25黑白顯示 1 40×25彩色顯示 2 80×25黑白顯示 3 80×25彩色顯示 7 80×25單色顯示 -1 上一次的顯示方式第42頁(yè)/共87頁(yè)1.1.2文本方式顏色控制函數(shù)文本顏色設(shè)置函數(shù)voidtextcolor(intcolor)——控制文本顯示的前景色,即字符顯示的顏色,其參數(shù)color僅能選擇17種顏色,即值為0~16。文本背景顏色設(shè)置函數(shù)voidtextbackground(intcolor)——設(shè)置文本顯示的背景顏色,其參數(shù)color僅能選擇8種顏色,即值為0~7。文本屬性設(shè)置函數(shù)voidtextattr(intattr)——設(shè)置字符顯示的顏色,背景色,字符顯示是否閃爍,顯示屬性參數(shù)attr可用一個(gè)字節(jié)即8位來描述。第43頁(yè)/共87頁(yè)1.1.3字符顯示亮度控制函數(shù)voidhighvideo(void)——用高亮度顯示字符。voidlowvideo(void)——用低亮度顯示字符。voidnormvideo(void)——將設(shè)置通常亮度顯示字符。第44頁(yè)/共87頁(yè)1.2窗口設(shè)置和文本輸出函數(shù)在文本方式下,沒進(jìn)行窗口設(shè)置時(shí),即窗口設(shè)置缺省時(shí),認(rèn)為整個(gè)屏幕為顯示窗口,TurboC提供了窗口設(shè)置函數(shù)window(),可由用戶根據(jù)自己的需要來重新設(shè)定顯示窗口。當(dāng)設(shè)定后,以后的控制臺(tái)I/O操作(即文本輸入輸出),就可均在此窗口中進(jìn)行。第45頁(yè)/共87頁(yè)1.2.1窗口設(shè)置函數(shù)voidwindow(intx1,inty1,intx2,inty2);其中(x1,y1)為窗口的左上角坐標(biāo),(x2,yz)為窗口的右下角坐標(biāo),這些坐標(biāo)是以整個(gè)屏幕為參考坐標(biāo)系。利用窗口函數(shù)可以在屏幕上定義多個(gè)不同窗口,以顯示不同的信息。第46頁(yè)/共87頁(yè)1.2.2控制臺(tái)文本輸出函數(shù)printf(),putc(),puts(),putchar()和輸出函數(shù)以整個(gè)屏幕為窗口的,它們不受由window設(shè)置的窗口限制,也無法用函數(shù)控制它們輸出的位置。TurboC提供了三個(gè)文本輸出函數(shù),intcprintf(char*format,...);intcputs(char*str);intputch(intch);它們受窗口的控制,窗口內(nèi)顯示光標(biāo)的位置,就是它開始輸出的位置。第47頁(yè)/共87頁(yè)1.3.1清屏函數(shù)voidclrscr(void);清除窗口中的文本,并將光標(biāo)移到當(dāng)前窗口的左上角,即(1,1)處。
voidclreol(void);除當(dāng)前窗口中從光標(biāo)位置開始到本行結(jié)尾的所有字符,但不改變光標(biāo)原來的位置。
voiddelline(void);刪除一行字符,該行是光標(biāo)所在行。第48頁(yè)/共87頁(yè)1.3.2光標(biāo)操作函數(shù)voidgotoxy(intx,inty);把光標(biāo)移到窗口內(nèi)的(x,y)處,x,y坐標(biāo)是相對(duì)窗口而言。它多和cprintf函數(shù)配合,以指定輸出開始位置。第49頁(yè)/共87頁(yè)1.4.1屏幕文本移動(dòng)函數(shù)voidmovetext(intx1,inty1,intx2,inty2,intx3,inty3);該函數(shù)將把屏幕上左上角為(xl,y1),右下角為(x2,y2)的矩形內(nèi)文本拷貝到左上角為(x3,y3)的一個(gè)新矩形區(qū)內(nèi)。這里x,y坐標(biāo)是以整個(gè)屏幕為窗口坐標(biāo)系,即屏幕左上角為(1,1)。該函數(shù)與開設(shè)的窗口無關(guān),且原矩形區(qū)文本不變。第50頁(yè)/共87頁(yè)1.4.2屏幕文本存取函數(shù)1、存文本函數(shù)——voidgettext(intxl,inty1,intx2,inty2,void*buffer);把左上角為(xl,y1),右下角為(x2,y2)的矩形區(qū)內(nèi)的文本存到由指針buffer指向的一個(gè)內(nèi)存緩沖區(qū)內(nèi)。2、取文本函數(shù)——voidputtext(intx1,inty1,intx2,inty2,void*buffer);把由buffer指針指向的緩沖區(qū)內(nèi)所存文本復(fù)制到屏幕上一矩形區(qū)內(nèi),該矩形區(qū)左上角為(x1,y1),右下角為(x2,y2)。第51頁(yè)/共87頁(yè)1.5狀態(tài)查詢函數(shù)voidgettextinfo(structtext_info*f);這里的text_info是在conio.h頭文件中定義的一個(gè)結(jié)構(gòu);顯示當(dāng)前屏幕的顯示方式,當(dāng)前窗口的坐標(biāo)、當(dāng)前光標(biāo)的位置,文本的顯示屬性等。第52頁(yè)/共87頁(yè)2.6基本圖形函數(shù)圖形由點(diǎn)、線、面組成,TurboC提供了一些函數(shù),以完成這些操作。第53頁(yè)/共87頁(yè)2.6.1畫點(diǎn)函數(shù)voidfarputpixel(intx,inty,intcolor);它表示在指定的x,y位置畫一點(diǎn),點(diǎn)的顯示顏色由設(shè)置的color值決定,關(guān)于顏色的設(shè)置,將在設(shè)置顏色函數(shù)中介紹。該函數(shù)的相對(duì)應(yīng)函數(shù)是取象素值函數(shù)intfargetpixel(intx,inty);得到在(x,y)點(diǎn)位置上的象素的顏色值。第54頁(yè)/共87頁(yè)2.6.2有關(guān)畫圖坐標(biāo)位置的函數(shù)①移動(dòng)畫筆到指定的(x,y)位置,移動(dòng)過程不畫:voidfarmoveto(intx,inty);②畫筆從現(xiàn)行位置(x,y)處移到一位置增量處(x+dx,y+dx),移動(dòng)過程不畫:voidfarmoverel(intdx,intdy);③得到當(dāng)前畫筆所在位置intfargetx(void);得到當(dāng)前畫筆的x位置intfargety(void);得到當(dāng)前畫筆的y位置第55頁(yè)/共87頁(yè)2.6.3畫線函數(shù)①兩點(diǎn)之間畫線函數(shù)。voidfarline(intx0,inty0,intx1,inty1);從(x0,y0)點(diǎn)到(x1,y1)點(diǎn)畫一直線。②從現(xiàn)行畫筆位置到某點(diǎn)畫線函數(shù)。voidfarlineto(intx,inty);將從現(xiàn)行畫筆位置到(x,y)點(diǎn)畫一直線。③從現(xiàn)行畫筆位置到一增量位置畫線函數(shù)voidfarlinerel(intdx,intdy);將從現(xiàn)行畫筆位置(x,y)到位置增量處(x+dx,y+dy)畫一直線。第56頁(yè)/共87頁(yè)畫線程序舉例#include<graphics.h>main(){ intgraphdriver=VGA; intgraphmode=VGAHI; initgraph(&graphdriver,&graphmode,""); cleardevice(); moveto(100,20); lineto(100,80); moveto(200,20); lineto(100,80); line(100,90,200,90); linerel(0,20); moverel(-100,0); linerel(30,20); getch(); closegraph();}第57頁(yè)/共87頁(yè)2.6.4畫矩形和條形圖函數(shù)①畫矩形函數(shù)voidfarrectangle(intxl,inty1,intx2,inty2);該函數(shù)將以(x1,y1)為左上角,(x2,y2)為右下角畫一矩形框。②畫條形圖函數(shù)voidbar(intx1,inty1,intx2,inty2);該函數(shù)將以(xl,y1)為左上角,(x2,y2)為右下角畫一實(shí)形條狀圖,沒有邊框,圖的顏色和填充模式可以設(shè)定。第58頁(yè)/共87頁(yè)程序舉例編寫程序,由rectangle函數(shù)以(100,20)為左上角,(200,50)為右下角畫一矩形,接著由bar函數(shù)以(100,80)為左上角,(150,180)為右下角畫一實(shí)形條狀圖,用缺省顏色(白色)填充。第59頁(yè)/共87頁(yè)#include<graphics.h>main(){intgraphdriver=DETECT;intgraphmode,x;initgraph(&graphdriver,&graphmode,””);cleardevice();rectangle(100,20,200,50);bar(100,80,150,180)5getch();closegraph();}第60頁(yè)/共87頁(yè)2.6.5畫橢圓、圓和扇形圖函數(shù)①畫橢圓函數(shù)voidellipse(intx,inty,intstangle,intendangel,intxradius,intyradius);該函數(shù)將以(x,y)為中心,以xradius和yradius為x軸和y軸半徑,從起始角stangle開始到endangle角結(jié)束,畫一橢圓線。當(dāng)stangle=0,endangle=360時(shí),則畫出的是一個(gè)完整的橢圓,否則畫出的將是橢圓弧。第61頁(yè)/共87頁(yè)②畫圓函數(shù)voidfarcircle(intx,inty,intradius);該函數(shù)將以(x,y)為圓心,radius為半徑畫個(gè)圓。③畫圓弧函數(shù)voidfararc(intx,inty,intstangle,intendangle,intradius);該函數(shù)將以(x,y)為圓心,radius為半徑,從stangle為起始角開始,到endangle為結(jié)束角畫一圓弧。第62頁(yè)/共87頁(yè)④畫扇形圖函數(shù)voidfarpieslice(intx,inty,intstangle,intendangle,intradius);該函數(shù)將以(x,y)為圓心,radius為半徑,從stangle為起始角,endangle為結(jié)束角,畫一扇形圖,扇形圖的填充模式和填充顏色可以事先設(shè)定,否則以缺省模式進(jìn)行。第63頁(yè)/共87頁(yè)2.7.1顏色設(shè)置函數(shù)①顏色設(shè)置函數(shù)該函數(shù)的原型說明為:
voidfarsetcolor(intcolor);該函數(shù)將使得前景以所選color顏色進(jìn)行顯示,對(duì)CGA,當(dāng)為中分辨模式時(shí)只能選0,1,2,3。顯示圖形的背景色可用setbkcolor函數(shù)來選擇,其顏色可從l6種中選1。②選擇背景顏色的函數(shù)
voidfarsetbkcolor(intcolor)該函數(shù)將使得背景色按所選16種中的一種color顏色進(jìn)行顯示,第64頁(yè)/共87頁(yè)2.9.1填色函數(shù)voidfarsetfilestyle(intpattern,intcolor);該函數(shù)將用設(shè)定的color顏色和pattern圖模式對(duì)后面畫出的輪廓圖進(jìn)行填充,這些圖輪廓是由待定函數(shù)畫出的,color實(shí)際上就是調(diào)色板寄存器索引號(hào),對(duì)VGAHI方式為0~l5,即l6色,pattern表示填充模式。第65頁(yè)/共87頁(yè)2.9.2用戶自定義填充函數(shù)voidfarsetfillpattern(char*upattefn,intcolor);該函數(shù)設(shè)置用戶自定義可填充模式,以color指出的顏色對(duì)封閉圖形進(jìn)行填充。這里的color實(shí)際上就是調(diào)色板寄存器號(hào),也可用顏色名代替。參數(shù)upattern是一個(gè)指向8個(gè)字節(jié)存儲(chǔ)區(qū)的指針,這8個(gè)字節(jié)表示了一個(gè)8×8象素點(diǎn)陣組成的填充圖模,它是由用戶自定義的,它將用來對(duì)封閉圖形填充。8個(gè)字節(jié)的圖模是這樣形成的:每個(gè)字節(jié)代表一行,而每個(gè)字節(jié)的每一個(gè)二進(jìn)制位代表該行的對(duì)應(yīng)列上的象素。是1,則用color顯示,是0則不顯示。第66頁(yè)/共87頁(yè)畫三維立體直方圖函數(shù)voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);該函數(shù)參數(shù)名定義如圖2.14所示。當(dāng)topflag非0時(shí),畫出三維頂,否則將不畫出三維頂,depth決定了三維直方圖的長(zhǎng)度。第67頁(yè)/共87頁(yè)與填充函數(shù)有關(guān)的作圖函數(shù)①畫三維立體直方圖函數(shù)voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);
②畫橢圓扇形函數(shù)
viodfarsector(intx,inty,intstangle,intendang1e,intxradius,intyradius);該函數(shù)將以(x,y)為圓心,以xradius和yradius為x軸和y軸半徑,從起始角stang1e開始到endang1e角結(jié)束,畫一橢圓扇形圖,并按設(shè)置的填充模式和顏色填充。當(dāng)stang1e為0,endangle為360時(shí),則畫出一完整的橢圓圖。第68頁(yè)/共87頁(yè)③畫橢圓圖函數(shù)
voidfarfillellipse(intx,inty,intxradius,intyradius);”該函數(shù)將以(x,y)為圓心,以xradius和yradius為x軸和y軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式和顏色填充。④畫多邊形圖函數(shù)
voidfarfillpoly(intnumpoints,intfar*polypoints)
該函數(shù)將畫出一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由polypoints給出的多邊形,也即邊數(shù)為polypoints-1,當(dāng)為一封閉圖形時(shí),numpohts應(yīng)為多邊形的頂點(diǎn)數(shù)加1,并且第一個(gè)頂點(diǎn)坐標(biāo)應(yīng)和最后一個(gè)頂點(diǎn)的坐標(biāo)相同。第69頁(yè)/共87頁(yè)2.7顏色控制函數(shù)象素的顯示顏色,或者說畫線、填充面的顏色都可以用一些函數(shù)來設(shè)置,否則將采用缺省的值。顯示點(diǎn)、線、面的顏色,稱為前景色,而襯托它們的背景,稱為背景色。按照CGA、EGA、VGA圖形適配器的硬件結(jié)構(gòu),顏色可以通過對(duì)其內(nèi)部相應(yīng)的寄存器進(jìn)行編程來改變,但不編程時(shí),則取缺省值。顏色的設(shè)置,一般用所謂調(diào)色板來進(jìn)行描述,它實(shí)際上對(duì)應(yīng)一些硬件的寄存器。第70頁(yè)/共87頁(yè)調(diào)色板從C語言的角度看,調(diào)色板實(shí)際上就是一張顏色索引表,對(duì)CGA顯示器,在中分辨顯示方式下,有4種顯示模式,每一種模式對(duì)應(yīng)有一個(gè)調(diào)色板,可用調(diào)色板號(hào)區(qū)別。模式 調(diào)色板號(hào) 顏色值
0 1 23 CGAC0 0 背景色 綠 紅 黃 CGAC1 1 背景色 青 洋紅 白 CGAC2 2 背景色 淡綠 淡紅 棕 CGAC3 3 背景色 淡青 淡洋紅淡灰
第71頁(yè)/共87頁(yè)2.7.1顏色設(shè)置函數(shù)①前景顏色設(shè)置函數(shù):
voidfarsetcolor(intcolor);該函數(shù)將使得前景以所選color顏色進(jìn)行顯示,對(duì)CGA,當(dāng)為中分辨模式時(shí)只能選0,1,2,3。②選擇背景顏色的函數(shù):
voidfarsetbkcolor(intcolor)該函數(shù)將使得背景色按所選16種中的一種color顏色進(jìn)行顯示。第72頁(yè)/共87頁(yè)2.8.1設(shè)定線型函數(shù)TurboC也提供了改變線的寬度、類型的函數(shù),其線的寬度當(dāng)不設(shè)定時(shí),取缺省值,即一個(gè)象素寬,當(dāng)設(shè)定為3時(shí),可取三個(gè)象素寬。當(dāng)線的形狀不設(shè)定時(shí),取缺省值,即實(shí)線。設(shè)定時(shí),可有5種選擇,它們可用設(shè)定線型函數(shù)來進(jìn)行設(shè)置:voidfarsetlinestyle(intlinestyle,unsignedupattern,intthickness);其中1inestyle為線型參數(shù);thickness為線的寬度參數(shù)。第73頁(yè)/共87頁(yè)2.9.1填色函數(shù)voidfarsetfilestyle(intpattern,intcolor);該函數(shù)將用設(shè)定的color顏色和pattern圖模式對(duì)后面畫出的輪廓圖進(jìn)行填充,這些圖輪廓是由待定函數(shù)畫出的。color實(shí)際上就是調(diào)色板寄存器索引號(hào),pattern表示填充模式,第74頁(yè)/共87頁(yè)2.9.2用戶自定義填充函數(shù)voidfarsetfillpattern(char*upattefn,intcolor);該函數(shù)設(shè)置用戶自定義可填充模式,以color指出的顏色對(duì)封閉圖形進(jìn)行填充。color實(shí)際上就是調(diào)色板寄存器號(hào),也可用顏色名代替。參數(shù)upattern是一個(gè)指向8個(gè)字節(jié)存儲(chǔ)區(qū)的指針,這8個(gè)字節(jié)表示了一個(gè)8×8象素點(diǎn)陣組成的填充圖模,它是由用戶自定義的,它將用來對(duì)封閉圖形填充。第75頁(yè)/共87頁(yè)2.9.3得到填充模式和顏色的函數(shù)voidfarfillsettings(structfillsettingstypefar*fillinfo);它將得到當(dāng)前的填充模式和顏色,這些信息存在結(jié)構(gòu)指針變量fillinfo指出的結(jié)構(gòu)中。第76頁(yè)/共87頁(yè)2.9.4與填充函數(shù)有關(guān)的作圖函數(shù)畫條形圖函數(shù)bar和畫扇形函數(shù)pieslise,它們需要用setfillstyle函數(shù)設(shè)置填充模式和顏色,否則按缺省方式。其它:①畫三維立體直方圖函數(shù)voidfarbar3d(intx1,inty1,intx2,inty2,intdepth,inttopflag);該函數(shù)參數(shù)名定義:topflag非0時(shí),畫出三維頂,否則將不畫出三維頂,depth決定了三維直方圖的長(zhǎng)度。第77頁(yè)/共87頁(yè)②畫橢圓扇形函數(shù)
viodfarsector(intx,inty,intstangle,intendang1e,intxradius,intyradius);該函數(shù)將以(x,y)為圓心,以xradius和yradius為x軸和y軸半徑,從起始角stang1e開始到endang1e角結(jié)束,畫一橢圓扇形圖,并按設(shè)置的填充模式和顏色填充。當(dāng)stang1e為0,endangle為360時(shí),則畫出一完整的橢圓圖。第78頁(yè)/共87頁(yè)③畫橢圓圖函數(shù)
voidfarfillellipse(intx,inty,intxradius,intyradius);”該函數(shù)將以(x,y)為圓心,以xradius和yradius為x軸和y軸半徑,畫一橢圓圖,并以設(shè)定或缺省模式和顏色填充。④畫多邊形圖函數(shù)
voidfarfillpoly(intnumpoints,intfar*polypoints)
該函數(shù)將畫出一個(gè)頂點(diǎn)數(shù)為numpoints,各頂點(diǎn)坐標(biāo)由polypoints給出的多邊形,也即邊數(shù)為polypoints-1,當(dāng)為一封閉圖形時(shí),numpohts應(yīng)為多邊形的頂點(diǎn)數(shù)加1,并且第一個(gè)頂點(diǎn)坐標(biāo)應(yīng)和最后一個(gè)頂點(diǎn)的坐標(biāo)相同。第79頁(yè)/共87頁(yè)2.9.5可對(duì)任意封閉圖形填充的函數(shù)setfillstyle函數(shù),只能對(duì)由上述特定函數(shù)產(chǎn)生的圖形進(jìn)行顏色填充,對(duì)任意封閉圖形均可進(jìn)行填充的是函數(shù):
voidfarfloodfill(intx,inty,intborder);該函數(shù)將對(duì)一封閉圖形進(jìn)行填充,其顏色和模式將由設(shè)定的或缺省的圖模與顏色決定。其中參數(shù)(x,y)為封閉圖形中的任一點(diǎn),border是封閉圖形的邊框顏色。編程時(shí)該函數(shù)位于畫圖形
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江蘇省揚(yáng)州市儀征市2019-2020學(xué)年八年級(jí)下學(xué)期期中物理試題【含答案、解析】
- 2025版圖書館圖書出版資助合同規(guī)范模板3篇
- 2025版二手豪華轎車買賣及保養(yǎng)維修增值合同3篇
- 廣東省韶關(guān)市2024-2025學(xué)年八年級(jí)上學(xué)期期末地理試題(含答案)
- 2025年度木材廠租地合同與生態(tài)補(bǔ)償協(xié)議書4篇
- 2025年代購(gòu)物品委托合同
- 2025年醫(yī)療信息軟件開發(fā)協(xié)議書
- 2025年學(xué)員就業(yè)服務(wù)合作協(xié)議
- 2025年分期付款美食餐飲外賣協(xié)議
- 2025年加盟經(jīng)營(yíng)合同簽署簽訂
- 2025-2030年中國(guó)草莓市場(chǎng)競(jìng)爭(zhēng)格局及發(fā)展趨勢(shì)分析報(bào)告
- 奕成玻璃基板先進(jìn)封裝中試線項(xiàng)目環(huán)評(píng)報(bào)告表
- 廣西壯族自治區(qū)房屋建筑和市政基礎(chǔ)設(shè)施全過程工程咨詢服務(wù)招標(biāo)文件范本(2020年版)修訂版
- 人教版八年級(jí)英語上冊(cè)期末專項(xiàng)復(fù)習(xí)-完形填空和閱讀理解(含答案)
- 2024新版有限空間作業(yè)安全大培訓(xùn)
- GB/T 44304-2024精細(xì)陶瓷室溫?cái)嗔炎枇υ囼?yàn)方法壓痕(IF)法
- 年度董事會(huì)工作計(jì)劃
- 《退休不褪色余熱亦生輝》學(xué)校退休教師歡送會(huì)
- 02R112拱頂油罐圖集
- 2021年新教材重慶生物高考真題(含答案解析)
- 酒店協(xié)議價(jià)格合同范文(8篇)
評(píng)論
0/150
提交評(píng)論