基于Matlab的三相橋式全控整流電路的仿真研究-圖文(精)_第1頁
基于Matlab的三相橋式全控整流電路的仿真研究-圖文(精)_第2頁
基于Matlab的三相橋式全控整流電路的仿真研究-圖文(精)_第3頁
基于Matlab的三相橋式全控整流電路的仿真研究-圖文(精)_第4頁
基于Matlab的三相橋式全控整流電路的仿真研究-圖文(精)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、用simulink對三相橋式全控整流電路進行仿真研究姓名:劉佰蘭 學校:中山大學 學號:09382014 專業(yè):自動化摘要:三相橋式全控整流電路在現(xiàn)代電力電子技術中具有很重要的作用和很廣泛的應用。這里結(jié)合全控整流電路理論基礎,采用Matlab的仿真工具Simulink對三相橋式全控整流電路的進行仿真,對輸出參數(shù)進行仿真及驗證,進一步了解三相橋式全控整流電路的工作原理。關鍵詞:simulink 三相橋式全控整流 仿真一、研究背景隨著社會生產(chǎn)和科學技術的發(fā)展,整流電路在自動控制系統(tǒng)、測量系統(tǒng)和發(fā)電機勵磁系統(tǒng)等領域的應用日益廣泛。常用的三相整流電路有三相橋式不可控整流電路、三相橋式半控整流電路和三相

2、橋式全控整流電路。三相全控整流電路的整流負載容量較大,輸出直流電壓脈動較小,是目前應用最為廣泛的整流電路。它是由半波整流電路發(fā)展而來的。由一組共陰極的三相半波可控整流電路和一組共陽極接法的晶閘管串聯(lián)而成。六個晶閘管分別由按一定規(guī)律的脈沖觸發(fā)導通,來實現(xiàn)對三相交流電的整流,當改變晶閘管的觸發(fā)角時,相應的輸出電壓平均值也會改變,從而得到不同的輸出。由于整流電路涉及到交流信號、直流信號以及觸發(fā)信號,同時包含晶閘管、電容、電感、電阻等多種元件,采用常規(guī)電路分析方法顯得相當繁瑣,高壓情況下實驗也難順利進行。Matlab提供的可視化仿真工具Simulink可直接建立電路仿真模型,隨意改變仿真參數(shù),并且立即

3、可得到任意的仿真結(jié)果,直觀性強,進一步省去了編程的步驟。本文利用Simulink對三相橋式全控整流電路進行建模,對不同控制角、橋故障情況下進行了仿真分析,既進一步加深了三相橋式全控整流電路的理論,同時也為現(xiàn)代電力電子實驗教學奠定良好的實驗基礎。二、三相橋式全控整流電路工作原理1.三相橋式全控整流電路特性分析圖1是電路接線圖。三相橋式全控整流電路圖是應用最為廣泛的整流電路,其電路圖如下:圖1在三相橋式全控整流電路中,對共陰極組和共陽極組是同時進行控制的,控制角都是。由于三相橋式整流電路是兩組三相半波電路的串聯(lián),因此整流電壓為三相半波時的兩倍。很顯然在輸出電壓相同的情況下,三相橋式晶閘管要求的最大

4、反向電壓,可比三相半波線路中的晶閘管低一半。 為了分析方便,使三相全控橋的六個晶閘管觸發(fā)的順序是1-2-3-4-5-6,晶閘管是這樣編號的:晶閘管KP1和KP4接a相,晶閘管KP3和KP6接b相,晶管KP5和KP2接c相。晶閘管KP1、KP3、KP5組成共陰極組,而晶閘管KP2、KP4、KP6組成共陽極組。 為了搞清楚變化時各晶閘管的導通規(guī)律,分析輸出波形的變化規(guī)則,下面研究幾個特殊控制角,先分析=0的情況,也就是在自然換相點觸發(fā)換相時的情況。為了分析方便起見,把一個周期等分6段(見圖2)。在第(1)段期間,a相電壓最高,而共陰極組的晶閘管KP1被觸發(fā)導通,b相電位最低,所以供陽極組的晶閘管K

5、P6被觸發(fā)導通。這時電流由a相經(jīng)KP1流向負載,再經(jīng)KP6流入b相。變壓器a、b兩相工作,共陰極組的a相電流為正,共陽極組的b相電流為負。加在負載上的整流電壓為ud=ua-ub=uab經(jīng)過60后進入第(2段時期。這時a相電位仍然最高,晶閘管KPl繼續(xù)導通,但是c相電位卻變成最低,當經(jīng)過自然換相點時觸發(fā)c相晶閘管KP2,電流即從b相換到c相,KP6承受反向電壓而關斷。這時電流由a相流出經(jīng)KPl、負載、KP2流回電源c相。變壓器a、c兩相工作。這時a相電流為正,c相電流為負。在負載上的電壓為ud=ua-uc=uac再經(jīng)過60,進入第(3段時期。這時b相電位最高,共陰極組在經(jīng)過自然換相點時,觸發(fā)導通

6、晶閘管KP3,電流即從a相換到b相,c相晶閘管KP2因電位仍然最低而繼續(xù)導通。此時變壓器bc兩相工作,在負載上的電壓為ud=ub-uc=ubc余相依此類推。2.帶電阻負載時的工作情況:(1當a60時,ud波形均連續(xù),對于電阻負載,id波形與ud波形形狀一樣,也連續(xù)波形圖:a =0(圖3a)、a =30(圖3b)、a =60(圖3c) (2當a60時,ud波形每60中有一段為零,ud波形不能出現(xiàn)負值波形圖: a =90(圖3d) (3帶電阻負載時三相橋式全控整流電路a角的移相范圍是120 3.晶閘管及輸出整流電壓的情況如表1所示 :表1時段IIIIIIIVVVI共陰級組中導通的晶閘管VT1VT1

7、VT3VT3VT5VT5共陰級組中導通的晶閘管VT6VT2VT2VT4VT4VT6整流輸出電壓ua-ub=uabua-uc=uacub-uc=ubcub-ua=ubauc-ua=ucauc-ub=ucb圖3a =0圖3b =30圖3c =60圖4d =904. 三相橋式全控整流電路定量分析(1當整流輸出電壓連續(xù)時(即帶阻感負載時,或帶電阻負載a60時)的平均值為: (2帶電阻負載且a 60時,整流電壓平均值為:輸出電流平均值為 :Id=Ud /R 三、仿真實驗仿真接線如圖5所示。圖5參數(shù)設置:三相電源電壓設置為380V,頻率設為50Hz,相角相互相差120度。變換器橋設置相當于六個晶閘管,只要

8、有適當?shù)挠|發(fā)信號,便可以使變換器在對應的時刻導通。設置同步電壓的頻率跟脈沖寬度分別為50Hz和10%,“alpha_deg”是移相控制角信號輸入端,通過設置輸入信號給它的常數(shù)模塊參數(shù)便可以得到不同的觸發(fā)角a,從而產(chǎn)生給出間隔60 度的雙脈沖。選擇算法為ode23tb,stop time 設為0.1。1.電阻負載仿真設置電路負載為純電阻性,R100。以下是分別在a=0 度,30 度,60 度,90度時的仿真結(jié)果(見圖6-圖9。2.阻感負載仿真設置電路負載為阻感性,R100,L10H。以下是分別在a=0 度,30 度,60 度,90度時的仿真結(jié)果(見圖10-圖133.帶反電動勢阻感負載仿真設置電路

9、負載為阻感性,R100,L10H,反電動勢E25V。以下是分別在a=0 度,30 度,60 度,90度時的仿真結(jié)果(見圖14-圖16 圖 6 圖7圖 8 圖9 由仿真圖結(jié)合理論分析可知,上述波型圖是正確的。理論與仿真兩相驗證。四、仿真結(jié)果分析通過心上的波型圖,我們可以得出以下結(jié)論:1. 對于純電阻性負載,當觸發(fā)角小于等于90時,Ud波形均為正值,直流電流Id與Ud成正比,并且電阻為1歐姆,所以直流電流波形和直流電壓一樣。隨著觸發(fā)角增大,在電壓反向后管子即關斷,所以晶閘管的正向?qū)〞r間減少,對應著輸出平均電壓逐漸減小,并且當觸發(fā)角大于60后Ud波形出現(xiàn)斷續(xù)。而隨著觸發(fā)角的持續(xù)增大,輸出電壓急劇減

10、小,最后在120時幾乎趨近于0。對于晶閘管來說,在整流工作狀態(tài)下其所承受的為反向阻斷電壓。移相范圍為0120。2. 對于阻感性的負載,當觸發(fā)角小于60時,整流輸出電壓波形與純阻性負載時基本相同,所不同的是,阻感性負載直流側(cè)電流由于有電感的濾波作用而不會發(fā)生急劇的變化,輸出波形較為平穩(wěn)。而當觸發(fā)角大于等于60小于90時,由于電感的作用,延長了管子的導通時間,使Ud波形出現(xiàn)負值,而不會出現(xiàn)斷續(xù),所以直流側(cè)輸出電壓會減小,但是由于正面積仍然大于負面積,這時直流平均電壓仍為正值。當觸發(fā)角大于90時,由于id太小,晶閘管無法再導通,輸出幾乎為0。工作在整流狀態(tài),晶閘管所承受的電壓主要為反向阻斷電壓。移相

11、范圍為090。電感能夠使電流輸出平穩(wěn);在沒有續(xù)流二極管的情況下,晶閘管的導通時間得到延長,而當加入續(xù)流二極管后,電流通過二極管續(xù)流,二極管續(xù)流功率損耗較小,這時輸出電流相對來說就較不加續(xù)流二極管時要小,而輸出電壓相對來說卻要大些。3. 對于反電動勢負載由于有反電勢的作用,直流側(cè)輸出電壓相對于之前,會在原來的基礎上減去一個反電勢輸出,所以平均輸出電壓減小25V,相對的輸出直流電流也在原來的基礎上減小。輸出電壓越接近25V,輸出電流也更接近于0。五、結(jié)語通過仿真和分析,可知三相橋式全控整流電路的輸出電壓受控制角和負載特性的影響,通過應用Matlab的可視化仿真工具Simulink對三相橋式全控整流

12、電路的仿真結(jié)果進行了詳細分析,并與常規(guī)電路理論分析方法所得到的輸出電壓波形進行比較,進一步驗證了仿真結(jié)果的正確性。采用MatlabSimulink對三相橋式全控整流電路進行仿真分析,避免了常規(guī)分析方法中繁瑣的繪圖和計算過程,得到了一種直觀、快捷分析整流電路的新方法。應用MatlabSimulink進行仿真,在仿真過程中可以靈活改變仿真參數(shù),并且能直觀地觀察到仿真結(jié)果隨參數(shù)的變化情況。附錄資料:不需要的可以自行刪除 C語言圖形模式速成第一節(jié) 圖形模式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨立圖形程序的建立

13、、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時要確保有顯示器圖形驅(qū)動程序*.BGI,同時將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統(tǒng)默認屏幕為文本模式(80列,25行字符模式),此時所有圖形函數(shù)均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far

14、*gdriver, int far *gmode,char *path);其中gdriver和gmode分別表示圖形驅(qū)動器和模式,path是指圖形驅(qū)動程序所在的目錄路徑。有關圖形驅(qū)動器、圖形模式的符號常數(shù)及對應的分辨率見graphics. h。圖形驅(qū)動程序由Turbo C出版商提供,文件擴展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅(qū)動程序。例如對于EGA、 VGA 圖形適配器就調(diào)用驅(qū)動程序EGAVGA.BGI。#include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;i

15、nitgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅(qū)動器,Turbo C 提供了一個自動檢測顯示器硬件的函數(shù),其調(diào)用格式為:void far detectgraph(int *gdriver, *gmode);其中gdriver和gmode的意義與上面相同。 自動進行硬件測試后進行圖形初始化:#include stdio.h#include gr

16、aphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動測試硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*輸出測試結(jié)果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測試結(jié)果初始化圖形*/bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對圖形顯示器自

17、動檢測,然后再用圖形初始化函數(shù)進行初始化設置,但Turbo C提供了一種更簡單的方法, 即用gdriver=DETECT 語句后再跟initgraph()函數(shù)就行了。采用這種方法后,上例可改為:#include stdio.h#include graphics.hint main()int gdriver=DETECT, gmode;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(50, 50, 150, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegrap

18、h(),其調(diào)用格式為:void far closegraph(void);第二節(jié) 屏幕顏色的設置和清屏函數(shù)對于圖形模式的屏幕顏色設置,同樣分為背景色的設置和前景色的設置。在Turbo C中分別用下面兩個函數(shù): 設置背景色: void far setbkcolor(int color);設置作圖色: void far setcolor(int color);其中color 為圖形方式下顏色的規(guī)定數(shù)值,對EGA,VGA顯示器適配器,有關顏色的符號常數(shù)及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調(diào)用格式如下: voide far cleardevice(void);

19、#include stdio.h#include graphics.hint main()int gdriver, gmode, i,aa;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI); /*圖形初始化*/setbkcolor(0); /*設置圖形背景*/cleardevice();for(i=0; i=15; i+)setcolor(i); /*設置不同作圖色*/circle(320, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設置不

20、同背景色*/cleardevice();circle(320, 240, 20+i*10);getch();aa=getmaxcolor();printf(maxcolor=%d,aa);getch();closegraph();return 0;另外,TURBO C也提供了幾個獲得現(xiàn)行顏色設置情況的函數(shù)。 int far getbkcolor(void); 返回現(xiàn)行背景顏色值。int far getcolor(void); 返回現(xiàn)行作圖顏色值。int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。本

21、節(jié)對這些函數(shù)作一全面的介紹。 、畫點. 畫點函數(shù) void far putpixel(int x, int y, int color); 該函數(shù)表示有指定的象元畫一個按color 所確定顏色的點。對于顏色color的值可從表3中獲得而對x, y是指圖形象元的坐標。在圖形模式下,是按象元來定義坐標的。對VGA適配器,它的最高分辨率為640 x480,其中640為整個屏幕從左到右所有象元的個數(shù),480為整個屏幕從上到下所有象元的個數(shù)。屏幕的左上角坐標為(0,0),右下角坐標為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對于圖形屏幕坐

22、標,即象元來說的。關于點的另外一個函數(shù)是: int far getpixel(int x, int y); 它獲得當前點(x, y)的顏色值。 II、有關坐標位置的函數(shù) int far getmaxx(void);返回x軸的最大值。int far getmaxy(void);返回y軸的最大值。int far getx(void); 返回游標在x軸的位置。void far gety(void); 返回游標有y軸的位置。void far moveto(int x, int y); 移動游標到(x, y)點,不是畫點,在移動過程中亦畫點。void far moverel(int dx, int dy

23、); 移動游標從現(xiàn)行位置(x, y)移動到(x+dx, y+dy)的位置,移動過程中不畫點。、畫線I. 畫線函數(shù)TURBO C提供了一系列畫線函數(shù): void far line(int x0, int y0, int x1, int y1); 畫一條從點(x0, y0)到(x1, y1)的直線。void far lineto(int x, int y); 畫一作從現(xiàn)行游標到點(x, y)的直線。void far linerel(int dx, int dy); 畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+dx, y+dy)的直線。void far circle(int x, int y

24、, int radius); 以(x, y)為圓心,radius為半徑,畫一個圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,radius為半徑,從stangle開始到endangle結(jié)束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0 度,逆時針方向旋轉(zhuǎn)一周, 依次為90,180, 270和360度(其它有關函數(shù)也按此規(guī)定,不再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int

25、yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結(jié)束畫一段橢圓線,當stangle=0,endangle=360時, 畫出一個完整的橢圓。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個矩形框。 void far drawpoly(int numpoints, int far *polypoints); 畫一個頂點數(shù)為numpoints,各頂點坐標由polypoints給出的多邊形。polypoints

26、整型數(shù)組必須至少有2 倍頂點數(shù)個無素。每一個頂點的坐標都定義為x,y,并且x在前。值得注意的是當畫一個封閉的多邊形時,numpoints 的值取實際多邊形的頂點數(shù)加一,并且數(shù)組polypoints中第一個和最后一個點的坐標相同。下面舉一個用drawpoly()函數(shù)畫箭頭的例子。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;int arw16=200,102,300,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgrap

27、h(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch();closegraph();return 0;II、設定線型函數(shù)在沒有對線的特性進行設定之前,TURBO C 用其默認值,即一點寬的實線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函數(shù)。void far setlinestyle(int linestyl

28、e,unsigned upattern,int thickness);該函數(shù)用來設置線的有關信息,其中l(wèi)inestyle是線形狀的規(guī)定,見graphics.h。對于upattern,只有l(wèi)inestyle選USERBIT_LINE 時才有意義 (選其它線型,uppattern取0即可)。此時uppattern的16位二進制數(shù)的每一位代表一個象元,如果那位為1,則該象元打開,否則該象元關閉。 void far getlinesettings(struct linesettingstypefar *lineinfo);該函數(shù)將有關線的信息存放到由lineinfo 指向的結(jié)構(gòu)中,表中l(wèi)inesett

29、ingstype的結(jié)構(gòu)如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當前線的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時將所畫位置的原來信息覆蓋了(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在

30、規(guī)定的線進行異或后的結(jié)果。因此,當線的特性不變,進行兩次畫線操作相當于沒有畫線。有關線型設定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREEN);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設置三點寬實線*/setcolor(2);recta

31、ngle(220, 140, 420, 340);setcolor(WHITE);setlinestyle(4, 0 xaaaa, 1);/*設置一點寬用戶定義線*/line(220, 240, 420, 240);line(320, 140, 320, 340);getch();closegraph();return 0;第四節(jié) 基本圖形的填充填充就是用規(guī)定的顏色和圖模填滿一個封閉圖形。 一般是先畫輪廓再填充。TURBO C提供了一些先畫出基本圖形輪廓, 再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBO C 以默認方式填充。 void far bar(int x1,

32、 int y1, int x2, int y2);確定一個以(x1,y1)為左上角,(x2,y2)為右下角的矩形窗口,再按規(guī)定圖模和顏色填充。說明:此函數(shù)不畫出邊框,所以填充色為邊框。void far bar3d(int x1, int y1, int x2, int y2,int depth,int topflag);當topflag為非0時, 畫出一個三維的長方體。當topflag為0時,三維圖形不封頂,實際上很少這樣使用。說明: bar3d()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangl

33、e,int endangle,int radius);畫一個以(x, y)為圓心,radius為半徑,stangle為起始角度,endangle 為終止角度的扇形,再按規(guī)定方式填充。當stangle=0,endangle=360 時變成一個實心圓,并在圓內(nèi)從圓點沿X軸正向畫一條半徑。void far sector(int x, int y,int stanle,intendangle,int xradius, int yradius);畫一個以(x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充

34、。第五節(jié) 設定填充方式TURBO C有四個與填充方式有關的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的符號常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設置。當選用USER_FILL時,該函數(shù)對填充圖模和顏色不作任何改變。 之所以定義USER_FILL主要因為在獲得有關填充信息時用到此項。void far setfillpattern(char * upattern,

35、int color); 設置用戶定義的填充圖模的顏色以供對封閉圖形填充。其中upattern是一個指向8個字節(jié)的指針。這8個字節(jié)定義了8x8點陣的圖形。每個字節(jié)的8位二進制數(shù)表示水平8點,8個字節(jié)表示8行,然后以此為模型向個封閉區(qū)域填充。void far getfillpattern(char * upattern); 該函數(shù)將用戶定義的填充圖模存入upattern指針指向的內(nèi)存區(qū)域。void far getfillsetings(struct fillsettingstypefar * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結(jié)構(gòu)指針變量fillinfo中。其中fillsetting

36、stype結(jié)構(gòu)定義如下:struct fillsettingstypeint pattern; /* 現(xiàn)行填充模式 * /int color; /* 現(xiàn)行填充模式 * /; 有關圖形填充圖模的顏色的選擇,請看下面例程。#include stdio.h#include graphics.hmain()char str8=10,20,30,40,50,60,70,80; /*用戶定義圖模*/int gdriver,gmode,i;struct fillsettingstype save;/*定義一個用來存儲填充信息的結(jié)構(gòu)變量*/gdriver=DETECT;initgraph(&gdriver,&

37、gmode,C:TC2.0BGI);setbkcolor(BLUE);cleardevice();for(i=0;i13;i+)setcolor(i+3);setfillstyle(i,2+i); /* 設置填充類型 */bar(100,150,200,50); /*畫矩形并填充*/bar3d(300,100,500,200,70,1); /* 畫長方體并填充*/pieslice(200, 300, 90, 180, 90);/*畫扇形并填充*/sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/getch();cleardevice();setcolor(

38、14);setfillpattern(str, RED);bar(100,150,200,50);bar3d(300,100,500,200,70,0);pieslice(200,300,0,360,90);sector(500,300,0,360,100,50);getch();getfillsettings(&save);/*獲得用戶定義的填充模式信息*/closegraph();clrscr();printf(The pattern is %d, The color of filling is %d,save.pattern, save.color);/*輸出目前填充圖模和顏色值*/ge

39、tch();第六節(jié) 任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進行填充,但還不能對任意封閉圖形進行填充。為此,TURBO C 提供了一個可對任意封閉圖形填充的函數(shù),其調(diào)用格式如下: void far floodfill(int x, int y, int border); 其中:x, y為封閉圖形內(nèi)的任意一點,border為邊界的顏色,也就是封閉圖形輪廓的顏色。調(diào)用了該函數(shù)后,將用由函數(shù)setfillstyle()規(guī)定的顏色和模式填滿整個封閉圖形。注意:a. 如果x或y取在邊界上,則不進行填充。b. 如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。c. 如果

40、x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。d. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。#include stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(

41、LIGHTRED);setlinestyle(0,0,3);setfillstyle(1,14); /*設置填充方式*/bar3d(100,200,400,350,200,1); /*畫長方體并填充*/floodfill(450,300,LIGHTRED);/*填充長方體另外兩個面*/floodfill(250,150, LIGHTRED);rectangle(450,400,500,450); /*畫一矩形*/floodfill(470,420, LIGHTRED); /*填充矩形*/getch();closegraph();第七節(jié)屏幕操作函數(shù)除了清屏函數(shù)以外,關于屏幕操作還有以下函數(shù): v

42、oid far setactivepage(int pagenum); void far setvisualpage(int pagenum);這兩個函數(shù)只用于EGA,VGA 以及HERCULES圖形適配器。setctivepage()函數(shù)是為圖形輸出選擇激活頁。所謂激活頁是指后續(xù)圖形的輸出被寫到函數(shù)選定的pagenum頁面,該頁面并不一定可見。setvisualpage()函數(shù)才使pagenum所指定的頁面變成可見頁。頁面從0開始(Turbo C默認頁)。如果先用setactivepage() 函數(shù)在不同頁面上畫出一幅幅圖像,再用setvisualpage() 函數(shù)交替顯示,就可以實現(xiàn)一些動

43、畫的效果。void far getimage(int xl,int yl, int x2,int y2,void far *mapbuf); void far putimge(int x,int,y,void * mapbuf, int op); unsined far imagesize(int xl,int yl,int x2,int y2);這三個函數(shù)用于將屏幕上的圖像復制到內(nèi)存,然后再將內(nèi)存中的圖像送回到屏幕上。首先通過函數(shù)imagesize() 測試要保存左上角為(xl,yl),右上角為(x2,y2)的圖形屏幕區(qū)域內(nèi)的全部內(nèi)容需多少個字節(jié),然后再給mapbuf分配一個所測數(shù)字節(jié)內(nèi)存空

44、間的指針。通過調(diào)用getimage()函數(shù)就可將該區(qū)域內(nèi)的圖像保存在內(nèi)存中,需要時可用putimage()函數(shù)將該圖像輸出到左上角為點(x, y)的位置上,其中getimage()函數(shù)中的參數(shù)op規(guī)定如何釋放內(nèi)存中圖像。 關于這個參數(shù)的定義參見下表。對于imagesize()函數(shù),只能返回字節(jié)數(shù)小于64K字節(jié)的圖像區(qū)域,否則將會出錯,出錯時返回-1。本節(jié)介紹的函數(shù)在圖像動畫處理、菜單設計技巧中非常有用。下面程序模擬兩個小球動態(tài)碰撞過程。#include stdio.h#include graphics.h#include malloc.hint main()int i, gdriver, gm

45、ode, size;void *buf;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(LIGHTRED);setlinestyle(0,0,1);setfillstyle(1, 10);circle(100, 200, 30);floodfill(100, 200, 12);size=imagesize(69, 169, 131, 231);buf=malloc(size);if(!buf) return -1;getimage(69, 169, 13

46、1, 231,buf);putimage(500, 269, buf, COPY_PUT);for(i=0; i185; i+)putimage(70+i, 170, buf, COPY_PUT);putimage(500-i, 170, buf, COPY_PUT);for(i=0;i185; i+)putimage(255-i, 170, buf, COPY_PUT);putimage(315+i, 170, buf, COPY_PUT);getch();closegraph();第八節(jié)用戶對文本字符大小的設置前面介紹的settextstyle()函數(shù),可以設定圖形方式下輸出文本字符這字體

47、和大小但對于筆劃型字體(除8*8點陣字以個的字體),只能在水平和垂直方向以相同的放大倍數(shù)放大。 為此Turbo C2.0又提供了另外一個setusercharsize() 函數(shù),對筆劃字體可以分別設置水平和垂直方向的放大倍數(shù)。該函數(shù)的調(diào)用格式為: void far setusercharsize(int mulx, intdivx, int muly, int divy); 該函數(shù)用來設置筆劃型字和放大系數(shù),它只有在settextstyle()函數(shù)中的charsize為0(或USER_CHAR_SIZE)時才起作用,并且字體為函數(shù)settextstyle()規(guī)定的字體。 調(diào)用函數(shù)setuser

48、charsize()后,每個顯示在屏幕上的字符都以其缺省大小乘以mulx/divx為輸出字符寬,乘以muly/divy為輸出字符高。 #include stdio.h#include graphics.hint main()int gdriver, gmode;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setfillstyle(1, 2); /*設置填充方式*/setcolor(WHITE); /*設置白色作圖*/rectangle(100, 100, 330, 3

49、80);floodfill(50, 50, 14); /*填充方框以外的區(qū)域*/setcolor(12); /*作圖色為淡紅*/settextstyle(1, 0, 8); /*三重筆劃字體,放大8倍*/outtextxy(120, 120, Very Good);setusercharsize(2, 1, 4, 1);/*水平放大2倍,垂直放大4倍*/setcolor(15);settextstyle(3, 0, 5);/*無襯字筆劃,放大5倍*/outtextxy(220, 220, Very Good);setusercharsize(4, 1, 1, 1);settextstyle(3

50、, 0, 0);outtextxy(180, 320, Good);getch();closegraph();return 0;第九節(jié)文本字體、字型和輸出方式的設置有關圖形方式下的文本輸出函數(shù),可以通過setcolor()函數(shù)設置輸出文本的顏色。另外,也可以改變文本字體大小以及選擇是水平方向輸出還是垂直方向輸出。 void far settexjustify(int horiz, int vert); 該函數(shù)用于定位輸出字符串。對使用outtextxy(int x, int y, char far *str textstring)函數(shù)所輸出的字符串,其中哪個點對應于定位坐標(x,y)在Turb

51、oC2.0中是有規(guī)定的。如果把一個字符串看成一個長方形的圖形,在水平方向顯示時,字符串長方形按垂直方向可分為頂部,中部和底部三個位置,水平方向可分為左,中,右三個位置,兩者結(jié)合就有9個位置。settextjustify()函數(shù)的第一個參數(shù)horiz 指出水平方向三個位置中的一個,第二個參數(shù)vert指出垂直方向三個位置中的一個,二者就確定了其中一個位置。當規(guī)定了這個位置后,用outtextxy() 函數(shù)輸出字符串時, 字符串長方形的這個規(guī)定位置就對準函數(shù)中的(x,y)位置。而對用uttext()函數(shù)輸出字符串時,這個規(guī)定的位置就位于現(xiàn)行游標的位置。 有關參數(shù)horiz和vert的取值參見grap

52、hics.h。void far settextstyle(int font, int direction,int charsize); 該函數(shù)用來設置輸出字符的字形(由font確定)、輸出方向(由direction確定)和字符大小(由charsize確定)等特性。 Turbo C2.0對函數(shù)中各個參數(shù)的規(guī)定見graphics.h。有關圖形屏幕下文本輸出和字體字型設置函數(shù)的用法請看下例: #include stdio.h#include graphics.hint main()int i, gdriver, gmode;char s30;gdriver=DETECT;initgraph(&gdr

53、iver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setviewport(100, 100, 540, 380, 1);/*定義一個圖形窗口*/setfillstyle(1, 2); /*綠色以實填充*/setcolor(YELLOW);rectangle(0, 0, 439, 279);floodfill(50, 50, 14);setcolor(12);settextstyle(1, 0, 8);/*三重筆劃字體, 水平放大8倍*/outtextxy(20, 20, Good Better);setcolor(15);settextstyle(3, 0, 5);/*無襯筆劃字體, 水平放大5倍*/outtextxy(120, 120, Good Better);setcolor(14);settextstyle(2, 0, 8);i=620;sprintf(s, Your score is %d, i);/*將數(shù)字轉(zhuǎn)化為字符串*/outtextxy(30, 200

溫馨提示

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

最新文檔

評論

0/150

提交評論