




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、統(tǒng)計信號處理實驗一一、實驗目的1、掌握噪聲中信號檢測的方法;2、熟悉Matlab的使用;3、掌握用計算機進行數(shù)據(jù)分析的方法。二、實驗內(nèi)容假設某線性調頻脈沖信號為,(單位:us)。其中,=0.001Hz/us。接收機在有信號到達時接收到的信號為,在沒有信號到達時接收到的信號為。其中是均值為零、方差為的高斯白噪聲?,F(xiàn)以1us為間隔,對接受到的信號分別在上進行取樣,得到觀測序列。利用似然比檢測方法,對信號是否到達進行檢測(假設P(H0)= P(H1)=0.5);1.假設有信號到達的概率P(H1)=0.6,沒有信號到達的概率P(H0)=0.4,。利用Bayes檢測方法,對信號是否到達進行檢測;2.通過
2、計算機產(chǎn)生的仿真數(shù)據(jù),對兩種方法的檢測概率、誤警概率、漏警概率、總錯誤概率和Bayes風險進行仿真計算;3.改變判決的門限,觀察檢測方法的、和Bayes風險的變化;4.改變噪聲的方差,觀察檢測方法的、和Bayes風險的變化;5.將信號取樣間隔減小一倍(相應的取樣點數(shù)增加一倍),觀察似然比檢測方法的、和Bayes風險的變化;6.根據(jù)設計一個離散匹配濾波器,并觀察經(jīng)過該濾波器以后的輸出。7.在接收端,有可能并不知道真正的和,只能假設兩個數(shù)的取值,而假設的值即使與真值相近,但未必與真正的值相等。試按照其它假設的和設計匹配濾波器,然后對原來的加有噪聲的信號進行處理,觀察在失配的時候匹配濾波的效果,并解
3、釋實驗結果??梢园聪旅鎺讉€情況討論:a.假設與真值相等,但是,也就是按照固定頻率的信號處理;b.假設與真值相等,但是略有差異;c.假設和與真值均不相同,略有差異;8. 給定樣本xa、xb,計算信號到達的次數(shù)。三、實驗要求1)設計仿真計算的Matlab程序,給出軟件清單。2)完成實驗報告,對實驗過程進行描述,并給出實驗結果,對實驗數(shù)據(jù)進行分析,給出結論。四、實驗過程與結果本次實驗中的信號如下:s=sin(2*pi*(200000+0.001*t).*t);n=5.*randn(1,200);x=s+n或n。似然比檢測方法:似然比函數(shù),門限,如果,則判定;否則,判定。題目中似然比判決準則可寫作時判
4、定;否則,判定?;颍簳r判定;否則,判定。1. Bayes檢測方法Bayes風險函數(shù)是各個概率的線形組合:;其中C00-C11為風險系數(shù)。假設判斷正確不存在風險,即,則判決準則為:如果,判為;否則,判為。題目中,P(H1)=0.6,P(H0)=0.4,則門限。2.兩種方法各采樣5000次。有信號到達時判斷有信號則nd+1(檢測),有信號到達時判斷沒有信號則nm+1(漏警),沒有信號到達時判斷有信號則nf+1(誤警),總的判斷錯誤次數(shù)ne=nf+nm,最后pd=nd/5000;pf=nf/5000;pm=nm/5000;pe=ne/5000;Bayes風險:R=C00*P(H0)+C01*P(H1
5、)+(C10-C00)*P(H0)*pf+(C11-C01)*P(H1)*pd仿真結果:PdPfPmPeR似然比檢測0.88280.21240.11740.32980.2472Bayes檢測0.8040 0.13440.19620.33060.2251采用似然比檢測方法得到的檢測概率較大,漏警概率較??;Bayes檢測方法得到的虛警概率較小,風險系數(shù)較小,各有長處。3.改變判決的門限,兩種檢測方法、和Bayes風險的變化如下(風險系數(shù)不變):似然比檢測:R0.88280.21480.11740.33220.36710.88560.21660.11460.33120.27380.87720.215
6、80.12300.33880.30810.88360.22420.11660.34080.2160由表格可以看出檢測概率和虛警概率的變化總是一致的,而漏警概率與檢測概率變化相反。門限值越大檢測概率和虛警概率越小,漏警概率越大。并且門限值越大,Bayes風險也越高。Bayes檢測:R0.47080.01980.52940.54920.13750.73680.08860.26340.35200.22020.66600.06460.33420.39880.21110.86620.17680.13400.31080.1997由于虛警概率降低,并且風險系數(shù)(C10)較大,所以風險先降低。然后漏警概率的升
7、高使得其對風險的影響大于虛警概率,因此風險又會升高。4.改變噪聲的方差,觀察檢測方法的、和Bayes風險的變化(門限為0.4/0.6,風險系數(shù)不變):似然比檢測:方差R90.95720.06880.04300.11180.0807160.91780.13880.08240.22120.1604250.88980.22240.11040.33280.2440360.85960.27800.14060.41860.3066Bayes檢測:方差R90.94520.04540.05500.10040.0692160.87440.08940.12580.21520.1469250.79740.12480
8、.20280.32760.2214360.74720.15480.25300.40780.2755噪聲方差增大時,兩種檢測方法得到的檢測概率均降低,虛警概率均升高,漏警概率均升高,風險值均增大。噪聲方差越大,對信號的干擾越大,越難檢測到信號,即兩種方法的可靠性越差。5.將信號取樣間隔減小一倍(相應的取樣點數(shù)增加一倍),觀察似然比檢測方法的、和Bayes風險的變化:取樣點數(shù)增加一倍Pd=0.936;Pf=0.1094;Pm=0.0640;Pe=0.1734;R=0.1258;原取樣間隔Pd=0.8898;Pf=0.2224;Pm=0.1104;Pe=0.3328;R=0.2440;取樣點數(shù)增加一
9、倍后,Bayes風險降低為原來的一半左右,檢測可信度大大提高。6.根據(jù)設計一個離散匹配濾波器,并觀察經(jīng)過該濾波器以后的輸出。濾波器h(t)波形如下:有信號時x(t)經(jīng)過濾波器后的輸出如下:沒有信號時x(t)經(jīng)過濾波器后的輸出如下:對比有無信號的兩幅波形圖,可以明顯地看出t=200us處匹配濾波器對信號有放大作用,對干擾信號有抑制作用,即有濾波功能。7.在接收端,有可能并不知道真正的和,只能假設兩個數(shù)的取值,而假設的值即使與真值相近,但未必與真正的值相等。試按照其它假設的和設計匹配濾波器,然后對原來的加有噪聲的信號進行處理,觀察在失配的時候匹配濾波的效果,并解釋實驗結果??梢园聪旅鎺讉€情況討論:
10、a.假設與真值相等,但是,也就是按照固定頻率的信號處理;濾波器h(t)波形如下:有信號時x(t)經(jīng)過濾波器后的輸出如下:沒有信號時x(t)經(jīng)過濾波器后的輸出如下:匹配濾波幾乎沒有用,信號完全湮沒在噪聲中。b.假設與真值相等,但是略有差異;濾波器h(t)波形如下:有信號時x(t)經(jīng)過濾波器后的輸出如下:沒有信號時x(t)經(jīng)過濾波器后的輸出如下:t=200us處能夠明顯看到噪聲被抑制,說明匹配濾波器有效果。c.假設和與真值均不相同,略有差異;濾波器h(t)波形如下:有信號時x(t)經(jīng)過濾波器后的輸出如下:沒有信號時x(t)經(jīng)過濾波器后的輸出如下:t=200us處能夠看到噪聲被略微抑制,說明匹配濾波
11、器有一定效果,但不明顯。8. 給定樣本xa、xb,計算信號到達的次數(shù)。Na=839Nb=1043實驗代碼:clear;t=0:200;s=sin(2*pi*(200000+0.001*t).*t);figure(1);plot(t,s);axis(0,200,-1,1);xlabel(t/us)ylabel(s(t)title(s(t);% Lclear;t=1:200;n=5.*randn(1,200);s=sin(2*pi*(200000+0.001*t).*t);x=s+n;subplot(3,1,1);plot(t,s);axis(0,200,-1,1);xlabel(t/us);yl
12、abel(s(t);title(s(t);grid on;subplot(3,1,2);plot(n);axis(0,200,-25,25);xlabel(t/us);ylabel(n(t);title(n(t);grid on;subplot(3,1,3);plot(x);axis(0,200,-25,25);xlabel(t/us);ylabel(x(t);title(x(t);grid on;y1=sum(x.*s);y2=sum(s.*s);if y1 25*log(0.5/0.5)+0.5*y2 D1;else D0; end;%1 Bayesclear;t=1:200;n=5.*r
13、andn(1,200);s=sin(2*pi*(200000+0.001*t).*t);x=s+n;y1=sum(x.*s);y2=sum(s.*s);if y1 25*log(2*0.4/0.6)+0.5*y2 D1;else D0;end;%2% 2-Lclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.4; P1=0.6;C10=2; C01=1; C00=0; C11=0;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200
14、000+0.001*t).*t); x=s+n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(0.4/0.6)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(0.4/0.6)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=n
15、m/5000Pe=ne/5000R= C00*P0 + C01*P1 + (C10-C00)*P0*Pf + (C11-C01)*P1*Pd% 2-Bayesclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.4; P1=0.6;C10=2; C01=1; C00=0; C11=0;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=sum(x.*s); y2=sum(s.*s
16、); if y1 25*log(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/5000Pe=ne/5000
17、R= C00*P0 + C01*P1 + (C10-C00)*P0*Pf + (C11-C01)*P1*Pd%3 change the threshold%Lclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.3; P1=0.7;%change the thresholdC10=2; C01=1; C00=0; C11=0;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=s
18、um(x.*s); y2=sum(s.*s); if y1 25*log(0.4/0.6)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(0.4/0.6)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/5000Pe=ne/5000R= C00*P0 + C
19、01*P1 + (C10-C00)*P0*Pf + (C11-C01)*P1*Pd%Bayesclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.3; P1=0.7; %change the thresholdC10=2; C01=1; C00=0; C11=0;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=sum(x.*s); y2=sum(s.*s); if y1 2
20、5*log(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=5.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/5000Pe=ne/5000R= C00*P0
21、+ C01*P1 + (C10-C00)*P0*Pf + (C11-C01)*P1*Pd%4 change the Var of noice%Lclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.4; P1=0.6;%change the thresholdC10=2; C01=1; C00=0; C11=0;for i=1:5001; n=6.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=sum(x.*s
22、); y2=sum(s.*s); if y1 36*log(0.4/0.6)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=6.*randn(1,200); t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 36*log(0.4/0.6)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/5000Pe=ne/5000R= C00*P0 + C01*P1 +
23、 (C10-C00)*P0*Pf + (C11-C01)*P1*Pd%Bayesclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.4; P1=0.6;C10=2; C01=1; C00=0; C11=0;for i=1:5001; n=6.*randn(1,200); %change the Var of noice t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=sum(x.*s); y2=sum(s.*s); if y1 36*lo
24、g(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=6.*randn(1,200); %change the Var of noice t=1:200; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 36*log(C10-C00)/(C01-C11)*P0/P1)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/500
25、0Pe=ne/5000R= C00*P0 + C01*P1 + (C10-C00)*P0*Pf + (C11-C01)*P1*Pd%5 t=0.5tclear;nd=0; % D1|H1nf=0; % D1|H0nm=0; % D0|H1ne=0; % all errorR=0; %riskP0=0.4; P1=0.6;C10=2; C01=1; C00=0; C11=0;for i=1:5001; n=5.*randn(1,200*2); t=1:200*2; s=sin(2*pi*(200000+0.001*t).*t); x=s+n; y1=sum(x.*s); y2=sum(s.*s)
26、; if y1 25*log(P0/P1)+0.5*y2 nd=nd+1; else nm=nm+1; end;end;for i=1:5001; n=5.*randn(1,200*2); t=1:200*2; s=sin(2*pi*(200000+0.001*t).*t); x=n; y1=sum(x.*s); y2=sum(s.*s); if y1 25*log(P0/P1)+0.5*y2 nf=nf+1; end;end;ne=nf+nm;Pd=nd/5000Pf=nf/5000Pm=nm/5000Pe=ne/5000R= C00*P0 + C01*P1 + (C10-C00)*P0*P
27、f + (C11-C01)*P1*Pd%6 s(t)匹配濾波器clear;t=0:199;s=sin(2*pi*(200000+0.001*t).*t);for i=1:199 h(i)=s(200-i);end; %匹配濾波器figure(1);subplot(2,1,1);plot(s);xlabel(t/us);ylabel(s(t);grid on;subplot(2,1,2);plot(h);xlabel(t/us);ylabel(h(t);grid on;n=5.*randn(1,200);x1=s+n; %有信號x2=n; %無信號y1=conv(h,x1);y2=conv(h,
28、x2);figure(2);subplot(2,1,1);plot(x1);xlabel(t/us);ylabel(x(t);title(有信號到達時接收到的信號);grid on;subplot(2,1,2);plot(y1);xlabel(t/us);ylabel(y(t);title(有信號到達時匹配濾波器輸出信號);grid on;figure(3);subplot(2,1,1);plot(x2);xlabel(t/us);ylabel(x(t);title(無信號到達時接收到的信號);grid on;subplot(2,1,2);plot(y2);xlabel(t/us);ylabe
29、l(y(t);title(無信號到達時匹配濾波器輸出信號);grid on;%7 clear;f0=200050;df=0.0011;t=0:199;s=sin(2*pi*(f0+df*t).*t);for i=1:199 h(i)=s(200-i);end; %匹配濾波器figure(1);subplot(2,1,1);plot(s);xlabel(t/us);ylabel(s(t);grid on;subplot(2,1,2);plot(h);xlabel(t/us);ylabel(h(t);grid on;n=5.*randn(1,200);x1=s+n; %有信號x2=n; %無信號y
30、1=conv(h,x1);y2=conv(h,x2);figure(2);subplot(2,1,1);plot(x1);xlabel(t/us);ylabel(x(t);title(有信號到達時接收到的信號);grid on;subplot(2,1,2);plot(y1);xlabel(t/us);ylabel(y(t);title(有信號到達時匹配濾波器輸出信號);grid on;figure(3);subplot(2,1,1);plot(x2);xlabel(t/us);ylabel(x(t);title(無信號到達時接收到的信號);grid on;subplot(2,1,2);plot
31、(y2);xlabel(t/us);ylabel(y(t);title(無信號到達時匹配濾波器輸出信號);grid on;%8Na=0;Nb=0;for i=1:5000 t=0:199; s=sin(2*pi*(200000+0.001*t).*t); y1=sum(xb(i).*s); y3=sum(xa(i).*s); y2=sum(s.*s); if y1 25*log(0.4/0.6)+0.5*y2 Nb=Nb+1; end if y3 25*log(0.4/0.6)+0.5*y2 Na=Na+1; endendNaNb附錄資料:不需要的可以自行刪除 C語言圖形模式速成第一節(jié) 圖形模
32、式的初始化Turbo C 提供了非常豐富的圖形函數(shù),所有圖形函數(shù)的原型均在graphics. h 中,本節(jié)主要介紹圖形模式的初始化、獨立圖形程序的建立、基本圖形功能、圖形窗口以及圖形模式下的文本輸出等函數(shù)。另外,使用圖形函數(shù)時要確保有顯示器圖形驅動程序*.BGI,同時將集成開發(fā)環(huán)境options/Linker中的Graphics lib選為on,只有這樣才能保證正確使用圖形函數(shù)。 不同的顯示器適配器有不同的圖形分辨率。即是同一顯示器適配器,在不同模式下也有不同分辨率。因此,在屏幕作圖之前,必須根據(jù)顯示器適配器種類將顯示器設置成為某種圖形模式,在未設置圖形模式之前,微機系統(tǒng)默認屏幕為文本模式(8
33、0列,25行字符模式),此時所有圖形函數(shù)均不能工作。設置屏幕為圖形模式,可用下列圖形初始化函數(shù):void far initgraph(int far *gdriver, int far *gmode,char *path);其中gdriver和gmode分別表示圖形驅動器和模式,path是指圖形驅動程序所在的目錄路徑。有關圖形驅動器、圖形模式的符號常數(shù)及對應的分辨率見graphics. h。圖形驅動程序由Turbo C出版商提供,文件擴展名為.BGI。 根據(jù)不同的圖形適配器有不同的圖形驅動程序。例如對于EGA、 VGA 圖形適配器就調用驅動程序EGAVGA.BGI。#include stdio
34、.h#include graphics.hint main()int gdriver, gmode;gdriver=VGA;gmode=VGAHI;initgraph(&gdriver, &gmode, C:TC2.0BGI);bar3d(100, 100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;有時編程者并不知道所用的圖形顯示器適配器種類,或者需要將編寫的程序用于不同圖形驅動器,Turbo C 提供了一個自動檢測顯示器硬件的函數(shù),其調用格式為:void far detectgraph(int *gdriver, *g
35、mode);其中gdriver和gmode的意義與上面相同。 自動進行硬件測試后進行圖形初始化:#include stdio.h#include graphics.hint main()int gdriver, gmode;detectgraph(&gdriver, &gmode); /*自動測試硬件*/printf(the graphics driver is %d, mode is %dn,gdriver,gmode); /*輸出測試結果*/getch();initgraph(&gdriver, &gmode, C:TC2.0BGI);/* 根據(jù)測試結果初始化圖形*/bar3d(100,
36、100, 300, 250, 50, 1); /*畫一長方體*/getch();closegraph();return 0;上例程序中先對圖形顯示器自動檢測,然后再用圖形初始化函數(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
37、, 30, 50, 1);getch();closegraph();return 0;另外,Turbo C 提供了退出圖形狀態(tài)的函數(shù)closegraph(),其調用格式為: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ù)
38、及數(shù)值見graphics.h。清除圖形屏幕內(nèi)容但不清除圖形背景使用清屏函數(shù),其調用格式如下: voide far cleardevice(void);#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(32
39、0, 240, 20+i*10); /*畫半徑不同的圓*/getch();for(i=0; i=15; i+)setbkcolor(i); /*設置不同背景色*/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)行作圖顏色值。
40、int far getmaxcolor(void); 返回最高可用的顏色值。第三節(jié) 基本畫圖函數(shù)基本圖形函數(shù)包括畫點,線以及其它一些基本圖形的函數(shù)。本節(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ù)。屏幕的左上角坐標
41、為(0,0),右下角坐標為(639, 479),水平方向從左到右為x 軸正向,垂直方向從上到下為y軸正向。TURBO C的圖形函數(shù)都是相對于圖形屏幕坐標,即象元來說的。關于點的另外一個函數(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
42、(int x, int y); 移動游標到(x, y)點,不是畫點,在移動過程中亦畫點。void far moverel(int dx, int dy); 移動游標從現(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, i
43、nt dy); 畫一條從現(xiàn)行游標(x,y)到按相對增量確定的點(x+dx, y+dy)的直線。void far circle(int x, int y, int radius); 以(x, y)為圓心,radius為半徑,畫一個圓。void far arc(int x, int y, int stangle, int endangle,int radius); 以(x,y)為圓心,radius為半徑,從stangle開始到endangle結束(用度表示)畫一段圓弧線。在TURBO C中規(guī)定x軸正向為0 度,逆時針方向旋轉一周, 依次為90,180, 270和360度(其它有關函數(shù)也按此規(guī)定,不
44、再重述)。 void ellipse(int x, int y, int stangle, int endangle,int xradius,int yradius);以(x, y)為中心,xradius,yradius為x軸和y軸半徑,從角stangle 開始到endangle結束畫一段橢圓線,當stangle=0,endangle=360時, 畫出一個完整的橢圓。void far rectangle(int x1, int y1, int x2, inty2); 以(x1, y1)為左上角,(x2, y2)為右下角畫一個矩形框。 void far drawpoly(int numpoint
45、s, int far *polypoints); 畫一個頂點數(shù)為numpoints,各頂點坐標由polypoints給出的多邊形。polypoints整型數(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,3
46、00,102,300,107,330,100,300,93,300,98,200,98,200,102;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(12); /*設置作圖顏色*/drawpoly(8, arw); /*畫一箭頭*/getch();closegraph();return 0;II、設定線型函數(shù)在沒有對線的特性進行設定之前,TURBO C 用其默認值,即一點寬的實線,但TURBO C 也提供了可以改變線型的函數(shù)。線型包括:寬度和形狀。其中
47、寬度只有兩種選擇:一點寬和三點寬。而線的形狀則有五種。下面介紹有關線型的設置函數(shù)。void far setlinestyle(int linestyle,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(str
48、uct linesettingstypefar *lineinfo);該函數(shù)將有關線的信息存放到由lineinfo 指向的結構中,表中l(wèi)inesettingstype的結構如下:struct linesettingstypeint linestyle;unsigned upattern;int thickness;例如下面兩句程序可以讀出當前線的特性 struct linesettingstype *info;getlinesettings(info);void far setwritemode(int mode);該函數(shù)規(guī)定畫線的方式。如果mode=0,則表示畫線時將所畫位置的原來信息覆蓋了
49、(這是TURBO C的默認方式)。如果mode=1, 則表示畫線時用現(xiàn)在特性的線與所畫之處原有的線進行異或(XOR)操作,實際上畫出的線是原有線與現(xiàn)在規(guī)定的線進行異或后的結果。因此,當線的特性不變,進行兩次畫線操作相當于沒有畫線。有關線型設定和畫線函數(shù)的例子如下所示。#include stdio.h#include graphics.hint main()int gdriver, gmode, i;gdriver=DETECT;initgraph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(GREE
50、N);circle(320, 240, 98);setlinestyle(0, 0, 3); /*設置三點寬實線*/setcolor(2);rectangle(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提供了一些先畫出基本
51、圖形輪廓, 再按規(guī)定圖模和顏色填充整個封閉圖形的函數(shù)。在沒有改變填充方式時,TURBO C 以默認方式填充。 void far bar(int x1, 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
52、()函數(shù)中,長方體第三維的方向不隨任何參數(shù)而變,即始終為45度的方向。void far pieslice(int x,int y,int stangle,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);畫一個以(
53、x, y)為圓心分別以xradius, yradius為x軸和y軸半徑,stangle 為起始角,endangle為終止角的橢圓扇形,再按規(guī)定方式填充。第五節(jié) 設定填充方式TURBO C有四個與填充方式有關的函數(shù)。下面分別介紹: void far setfillstyle(int pattern, int color); color的值是當前屏幕圖形模式時顏色的有效值。pattern的值及與其等價的符號常數(shù)見graphics.h。除USER_FILL(用戶定義填充式樣)以外,其它填充式樣均可由setfillstyle() 函數(shù)設置。當選用USER_FILL時,該函數(shù)對填充圖模和顏色不作任何改變
54、。 之所以定義USER_FILL主要因為在獲得有關填充信息時用到此項。void far setfillpattern(char * upattern,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
55、fillsettingstypefar * fillinfo); 獲得現(xiàn)行圖模的顏色并將存入結構指針變量fillinfo中。其中fillsettingstype結構定義如下: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 fil
56、lsettingstype save;/*定義一個用來存儲填充信息的結構變量*/gdriver=DETECT;initgraph(&gdriver,&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);/*畫扇形并填充*/
57、sector(500,300,180,270,200,100);/*畫橢圓扇形并填充*/getch();cleardevice();setcolor(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
58、%d, The color of filling is %d,save.pattern, save.color);/*輸出目前填充圖模和顏色值*/getch();第六節(jié) 任意封閉圖形的填充截止目前為止,我們只能對一些特定形狀的封閉圖形進行填充,但還不能對任意封閉圖形進行填充。為此,TURBO C 提供了一個可對任意封閉圖形填充的函數(shù),其調用格式如下: void far floodfill(int x, int y, int border); 其中:x, y為封閉圖形內(nèi)的任意一點,border為邊界的顏色,也就是封閉圖形輪廓的顏色。調用了該函數(shù)后,將用由函數(shù)setfillstyle()規(guī)定的顏色
59、和模式填滿整個封閉圖形。注意:a. 如果x或y取在邊界上,則不進行填充。b. 如果不是封閉圖形則填充會從沒有封閉的地方溢出去,填滿其它地方。c. 如果x或y在圖形外面,則填充封閉圖形外的屏幕區(qū)域。d. 由border指定的顏色值必須與圖形輪廓的顏色值相同, 但填充色可選任意顏色。下例是有關floodfill()函數(shù)的用法,該程序填充了bar3d()所畫長方體中其它兩個未填充的面。#include stdio.h#include graphics.hmain()int gdriver, gmode;struct fillsettingstype save;gdriver=DETECT;initg
60、raph(&gdriver, &gmode, C:TC2.0BGI);setbkcolor(BLUE);cleardevice();setcolor(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
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 保安人員勞動合同保安人員合同
- 辦公家具定點采購合同
- 洗車機施工方案
- 小區(qū)商鋪裝飾裝修協(xié)議書
- 九龍坡屋頂漏水施工方案
- 《陶淵明集》序 賞析
- 南充硅pu籃球場施工方案
- 建筑工程廉潔監(jiān)理合同協(xié)議-@-1
- 泄流箱涵施工方案
- 遼河吹填施工方案
- 七年級歷史下冊 第一單元 綜合測試卷(人教福建版 2025年春)
- 2025年聚焦全國兩會知識競賽題庫及答案(共100題)
- 2025年中國融通資產(chǎn)管理集團限公司春季招聘(511人)高頻重點提升(共500題)附帶答案詳解
- 2025年湘教版初中地理七年級下冊重點知識點梳理與歸納
- DIN5480_德標花鍵計算表格
- 急性腎盂腎炎護理查房ppt課件
- 脫水機房設備安裝方案
- 致愛麗絲鋼琴曲五線譜
- 氣體放電基礎分析
- 專業(yè)技術人員年度(任期)考核登記表
- 人際反應指數(shù)量表
評論
0/150
提交評論