利用VC繪制對(duì)數(shù)坐標(biāo)系_第1頁(yè)
利用VC繪制對(duì)數(shù)坐標(biāo)系_第2頁(yè)
利用VC繪制對(duì)數(shù)坐標(biāo)系_第3頁(yè)
利用VC繪制對(duì)數(shù)坐標(biāo)系_第4頁(yè)
利用VC繪制對(duì)數(shù)坐標(biāo)系_第5頁(yè)
已閱讀5頁(yè),還剩17頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

利用VC繪制對(duì)數(shù)坐標(biāo)系http:///bonny95/article/details/2111368目標(biāo):繪制以任意頻率為起點(diǎn)、任意頻率為終點(diǎn)的對(duì)數(shù)坐標(biāo),并能對(duì)坐標(biāo)進(jìn)行任意縮放。實(shí)現(xiàn)方法:1、 定義標(biāo)準(zhǔn)頻率:頻率值為10N的相應(yīng)的頻率點(diǎn),其中N=...-2,-1,0,123...,單位MHz。如0.01MHZ、0.1MHz、1MHz、10MHz、100MHz等都是標(biāo)準(zhǔn)頻率。2、 思路首先找出標(biāo)準(zhǔn)頻率,畫(huà)出標(biāo)準(zhǔn)頻率線(xiàn),然后根據(jù)標(biāo)準(zhǔn)頻率畫(huà)出其他頻率線(xiàn)。3、 實(shí)現(xiàn)對(duì)數(shù)坐標(biāo)系數(shù)學(xué)基礎(chǔ)4占&4占&如圖所示的對(duì)數(shù)坐標(biāo)系中:冷―西_1昭帆屁)_log(巧/屁)

也—%誼£)—10或托)log(f3/fQ)由此,若知道上圖中的三個(gè)點(diǎn)的坐標(biāo),可以求出另一點(diǎn)的坐標(biāo)。找出起始|終止標(biāo)準(zhǔn)頻率的代碼:doublestdStartFreq,stdStopFreq;//標(biāo)準(zhǔn)頻率起始點(diǎn)、終止點(diǎn)//格式化標(biāo)準(zhǔn)起始頻率for(inti=0;i〈7;++i){if(StartFreq==pow((double)10,i-2))stdStartFreq=StartFreq;break;elseif(StartFreq〉pow((double)10,i-2)&&StartFreq〈pow((double)10,iT))

elsebreak;//格式化標(biāo)準(zhǔn)終止頻率for(inti=0;i〈7;++i)if(StopFreq==pow((double)10,i-2))stdStopFreq二StopFreq;break;elseif(StopFreq〉pow((double)10,i-2)&&StopFreq〈pow((double)10,i-l))elsestdStopFreq=pow((double)10,i-2);break;}起始標(biāo)準(zhǔn)頻率就是第一個(gè)大于起始頻率的標(biāo)準(zhǔn)頻率;終止標(biāo)準(zhǔn)頻率就是最后一個(gè)小于終止頻率的標(biāo)準(zhǔn)頻率。舉例:如果起始頻率為1.9MHz,終止頻率為201MHz,那么起始標(biāo)準(zhǔn)頻率為10MHz,終止標(biāo)準(zhǔn)頻率為100MHz;如果起始頻率為1.9MHz,終止頻率為20.1MHz,那么起始標(biāo)準(zhǔn)頻率為10MHz,終止標(biāo)準(zhǔn)頻率為10MHz;如果起始頻率為1.9MHz,終止頻率為2.01MHz,那么起始標(biāo)準(zhǔn)頻率為10MHz,終止標(biāo)準(zhǔn)頻率為1MHz。三種情況起始頻率W起始標(biāo)準(zhǔn)頻率<終止標(biāo)準(zhǔn)頻率W終止頻率在這種情況下,首先畫(huà)出起始I終止標(biāo)準(zhǔn)頻率線(xiàn)。對(duì)于起始頻率和起始標(biāo)準(zhǔn)頻率之間的部分,由起始標(biāo)準(zhǔn)頻率遞減向起始頻率畫(huà)出虛線(xiàn);對(duì)于終止標(biāo)準(zhǔn)頻率和終止頻率之間的部分,由終止標(biāo)準(zhǔn)頻率向終止頻率遞增畫(huà)出虛線(xiàn);對(duì)于起始標(biāo)準(zhǔn)頻率和終止標(biāo)準(zhǔn)頻率之間的部分,首先找到二者之間的標(biāo)準(zhǔn)頻率,然后根據(jù)標(biāo)準(zhǔn)頻率(包括起始I終止標(biāo)準(zhǔn)頻率)畫(huà)出其間的虛線(xiàn)。起始頻率<起始標(biāo)準(zhǔn)頻率=終止標(biāo)準(zhǔn)頻率<終止頻率這種情況是第一種情況的特例。因?yàn)槠鹗紭?biāo)準(zhǔn)頻率=終止標(biāo)準(zhǔn)頻率,所以第一種情況里只有兩種情況來(lái)畫(huà)虛線(xiàn)。終止標(biāo)準(zhǔn)頻率<起始頻率<終止頻率<起始標(biāo)準(zhǔn)頻率在這種情況下,先找出終止標(biāo)準(zhǔn)頻率,然后依據(jù)終止標(biāo)準(zhǔn)頻率遞增畫(huà)出起始頻率和終止頻率之間的虛線(xiàn)。4、其他問(wèn)題(1)細(xì)化間隔由于對(duì)數(shù)坐標(biāo)相同頻率段的間隔不同,如10?20MHz的間隔與80?90MHz的間隔不同,前者大于后者;另外,考慮到坐標(biāo)系放大時(shí),女如200MHz?300MHz頻率段,整個(gè)坐標(biāo)系中無(wú)虛線(xiàn),只有橫線(xiàn),很難對(duì)測(cè)試曲線(xiàn)中某個(gè)點(diǎn)的頻率進(jìn)行粗略判斷。因此,對(duì)于比較大的間隔,應(yīng)該進(jìn)行細(xì)化。方法就是利用相鄰兩虛線(xiàn)的間隔所占坐標(biāo)橫軸的比例進(jìn)行判斷,若大于某個(gè)數(shù)值則有必要進(jìn)行細(xì)化。由于間隔有大有小,考慮到細(xì)化的間隔不能影響整體對(duì)數(shù)坐標(biāo)的效果,因此細(xì)化的豎線(xiàn)用灰色虛線(xiàn)表示,且將間隔分成不同等級(jí),不同等級(jí)畫(huà)不同條灰色虛線(xiàn)。(2)坐標(biāo)標(biāo)注坐標(biāo)標(biāo)注同樣利用相鄰兩虛線(xiàn)的間隔所占坐標(biāo)橫軸的比例來(lái)進(jìn)行判斷,大于某個(gè)設(shè)定值后才進(jìn)行標(biāo)注,否則不進(jìn)行標(biāo)注。【源代碼如下:】//繪制對(duì)數(shù)坐標(biāo)voidCEMCView::DrawLogCoords(CDC*pDC,doubleStartFreq,doubleStopFreq){CStringnote;CRectrect;I this->GetClientRect(&rect);ORIGIN_X=rect.left+rect.Width()/10;//坐標(biāo)原點(diǎn)X坐標(biāo)ORIGIN_Y=rect.bottom-rect.Height()/10;//坐標(biāo)原點(diǎn)Y坐標(biāo)C00RD_T0P=rect.top+rect.Height()/10;//坐標(biāo)系最高點(diǎn)Y坐標(biāo)COORD_RIGHT=rect.right-rect.Width()/10;//坐標(biāo)系最右點(diǎn)X坐標(biāo)pDC->MoveTo(ORIGIN_X,ORIGIN_Y);pDC->LineTo(ORIGIN_X,COORD_TOP);//畫(huà)縱坐標(biāo)軸pDC->MoveTo(ORIGIN_X,ORIGIN_Y);pDC->LineTo(COORD_RIGHT,ORIGIN_Y);//畫(huà)橫坐標(biāo)軸note.Format(L"%4.2fM",StartFreq);pDC->TextOutW(ORIGIN_X-15,ORIGIN_Y+5,note);//原點(diǎn)標(biāo)注I//畫(huà)橫格線(xiàn)Idoubleyinc=(ORIGIN_Y-COORD_TOP)/9.0;Idoubletmp=(double)ORIGIN_Y-yInc;I for(inti=0;iv8;++i){pDC->MoveTo(ORIGIN_X,(int)tmp);pDC->LineTo(COORD_RIGHT,(int)tmp);note.Format(L"%d",10*(i+1));pDC->TextOutW(ORIGIN_X-25,(int)tmp-8,note);//z縱坐標(biāo)標(biāo)注tmp-=yInc;}pDC->MoveTo(ORIGIN_X,COORD_TOP);pDC->LineTo(COORD_RIGHT,COORD_TOP);note.Format(L"%d",90);pDC->TextOutW(ORIGIN_X-25,COORD_TOP-8,note)//z縱坐標(biāo)標(biāo)注note.Format(L"[dBuV]");pDC->TextOutW(ORIGIN_X-25,COORD_TOP-28,note)//z縱坐標(biāo)標(biāo)注I//畫(huà)豎格線(xiàn)//定義:標(biāo)準(zhǔn)頻率,是指0.01MHz、0.1MHz、1MHz// 10MHZ、100MHz、1000MHz等頻率I doublestdStartFreq,stdStopFreq;〃標(biāo)準(zhǔn)頻率起始點(diǎn)、終止點(diǎn)I //格式化標(biāo)準(zhǔn)起始頻率Ifor(inti=0;iv7;++i){Iif(StartFreq==pow((double)10,i-2)){stdStartFreq=StartFreq;I break;}Ielseif(StartFreq>pow((double)10,i-2)&&StartFreqvpow((double)10,i-1)){stdStartFreq=pow((double)10,i-1);{Iif(StopFreq==pow((double)10,i-2)){stdStopFreq=StopFreq;I break;}Ielseif(StopFreq>pow((double)10,i-2)&&StopFreq<pow((double)10,i-1)){stdStopFreq=pow((double)10,i-2);I break;}}IIdoubletotalRatio=log10(StopFreq/StartFreq);//整個(gè)頻率段所占的比例I inttotalLen=COORD_RIGHT-ORIGIN_X;//總長(zhǎng)度Iif(stdStartFreqv=stdStopFreq)//起始頻率和終止頻率相差大于等于一個(gè)數(shù)量級(jí),如StartFreq=2.5,StopFreq=200{IdoublestartRatio=log10(stdStartFreq/StartFreq)/totalRatio;//起始頻率與標(biāo)準(zhǔn)起始頻率之間的部分所占的比例IdoublestdRatio=log10(stdStopFreq/stdStartFreq)/totalRatio;//標(biāo)準(zhǔn)起始頻率和標(biāo)準(zhǔn)終止頻率之間部分所占的比例IdoublestopRatio=log10(StopFreq/stdStopFreq)/totalRatio;//標(biāo)準(zhǔn)終止頻率和終止頻率之間部分所占的比例I doublexStdStart=ORIGIN_X+startRatio*totalLen;//標(biāo)準(zhǔn)起始頻率所在的X坐標(biāo)pDC->MoveTo((int)xStdStart,ORIGIN_Y);pDC->LineTo((int)xStdStart,COORD_TOP);//繪制標(biāo)準(zhǔn)起始頻率所在的垂直實(shí)線(xiàn)note.Format(L"%4.2fM",stdStartFreq);pDC->TextOutW((int)xStdStart-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注I doublexStdStop=xStdStart+stdRatio*totalLen;//標(biāo)準(zhǔn)終止頻率所在的X坐標(biāo)pDC->MoveTo((int)xStdStop,ORIGIN_Y);pDC->LineTo((int)xStdStop,COORD_TOP);//繪制標(biāo)準(zhǔn)終止頻率所在的垂直實(shí)線(xiàn)note.Format(L"%4.2fM",stdStopFreq);pDC->TextOutW((int)xStdStop-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注I doublextmp=xStdStart;I for(inti=0;i<(int)(stdRatio*totalRatio);++i)//繪制標(biāo)準(zhǔn)起始頻率和標(biāo)準(zhǔn)終止頻率之間的垂直實(shí)線(xiàn){xtmp+=totalLen/totalRatio;pDC->MoveTo((int)xtmp,ORIGIN_Y);pDC->LineTo((int)xtmp,COORD_TOP);//繪制個(gè)關(guān)鍵頻率所在的垂直實(shí)線(xiàn)note.Format(L"%4.2fM",stdStartFreq*pow((double)10,i+1));pDC->TextOutW((int)xtmp-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注}IpDC->MoveTo(COORD_RIGHT,ORIGIN_Y);//終止頻率X坐標(biāo)為COORD_RIGHTpDC->LineTo(COORD_RIGHT,COORD_TOP);note.Format(L"%4.2fM",StopFreq);pDC->TextOutW(COORD_RIGHT-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注CPendotPen(PS_DOT,1,RGB(O,O,O));CPen*pOldPen=pDC->SelectObject(&dotPen);II //繪制起始頻率與標(biāo)準(zhǔn)起始頻率之間的虛線(xiàn)I doubletmpFreqL=stdStartFreq-stdStartFreq/10;〃低頻率I doubletmpFreqH=stdStartFreq;//高頻率I doubletmpRatio;xtmp=xStdStart;白while((tmpFreqL-StartFreq)>0.000001)/////由于double型浮點(diǎn)數(shù)精度的問(wèn)題,不得不米用這種方法進(jìn)行判斷/////{tmpRatio=log10(tmpFreqH/tmpFreqL)/totalRatio;xtmp-=tmpRatio*totalLen;pDC->MoveTo((int)xtmp,ORIGIN_Y);pDC->LineTo((int)xtmp,COORD_TOP);//繪制虛線(xiàn)I if(tmpRatio>=0.06){note.Format(L"%4.2fM",tmpFreqL);pDC->TextOutW(xtmp-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注}II //如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%,I //用灰色虛線(xiàn)畫(huà)出中間頻率線(xiàn)I if(tmpRatio>=0.10){CPengrayPen(PS_DOT,O.5,RGB(192,192,192));CPen*pDotPen=pDC->SelectObject(&grayPen);//灰色畫(huà)筆doublegrayInc;if(tmpRatio<0.15)grayInc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)elseif(tmpRatio>=0.15&&tmpRatiov0.20)grayInc=(tmpFreqH-tmpFreqL)/4;//畫(huà)3條灰色虛線(xiàn)elseif(tmpRatio>=0.20)grayInc=(tmpFreqH-tmpFreqL)/6;//畫(huà)5條灰色虛線(xiàn)doublegrayFreqH=tmpFreqL+grayInc;doublegrayFreqL=tmpFreqL;doublegrayLen=tmpRatio*totalLen;doublexgray=xtmp;doublegrayRatio;while(tmpFreqH-grayFreqH>0.000001){grayRatio=log10(grayFreqH/grayFreqL)/log10(tmpFreqH/tmpFreqL);pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH+=grayInc;grayFreqL+=grayInc;}IpDC->SelectObject(pDotPen);}ItmpFreqH-=stdStartFreq/10;tmpFreqL-=stdStartFreq/10;}I //起始頻率和第一條黑色虛線(xiàn)之間的灰色虛線(xiàn)I //如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%I //用灰色虛線(xiàn)畫(huà)出全部中間頻率線(xiàn)tmpRatio=log10(tmpFreqH/StartFreq)/totalRatio;I if(tmpRatio>=0.10){CPengrayPen(PS_DOT,O.5,RGB(192,192,192));CPen*pDotPen=pDC->SelectObject(&grayPen);//灰色畫(huà)筆II doublegrayInc;I if(tmpRatiov0.15)grayInc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)I elseif(tmpRatio>=0.15&&tmpRatiov0.20)grayInc=(tmpFreqH-tmpFreqL)/4;//畫(huà)2條灰色虛線(xiàn)I elseif(tmpRatio>=0.20&&tmpRatiov0.25)grayInc=(tmpFreqH-tmpFreqL)/6;//畫(huà)5條灰色虛線(xiàn)I elseif(tmpRatio>=0.25&&tmpRatiov0.30)grayInc=(tmpFreqH-tmpFreqL)/8;//畫(huà)7條灰色虛線(xiàn)I elseif(tmpRatio>=0.30&&tmpRatio<0.4)grayInc=(tmpFreqH-tmpFreqL)/9;//畫(huà)8條灰色虛線(xiàn)I elseif(tmpRatio>=0.40)grayInc=(tmpFreqH-tmpFreqL)/10;//畫(huà)8條灰色虛線(xiàn)doublegrayFreqH=tmpFreqH;I doublegrayFreqL=tmpFreqH-grayInc;I doublexgray=xtmp;I doublegrayRatio;I while(grayFreqL-StartFreq>0.000001){grayRatio=log10(grayFreqH/grayFreqL)/log10(tmpFreqH/StartFreq);xgray-=(xtmp-ORIGIN_X)*grayRatio;pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH-=grayInc;grayFreqL-=grayInc;}IpDC->SelectObject(pDotPen);}II //繪制標(biāo)準(zhǔn)起始頻率和標(biāo)準(zhǔn)終止頻率之間的垂直虛線(xiàn)tmp=xStdStart;I doubletmpFreq=stdStartFreq;I for(inti=0;i<(int)(stdRatio*totalRatio);++i){xtmp=tmp;//tmp代表關(guān)鍵頻率所在的X坐標(biāo),xtmp代表將要繪制的虛線(xiàn)的X坐標(biāo)ItmpFreqL=tmpFreq;tmpFreqH=2*tmpFreq;I //由低頻向高頻繪制虛線(xiàn)I for(intj=0;jv8;++j){tmpRatio=log10(tmpFreqH/tmpFreqL)/totalRatio;xtmp+=tmpRatio*totalLen;pDC->MoveTo(xtmp,ORIGIN_Y);pDC->LineTo(xtmp,COORD_TOP);//繪制虛線(xiàn)if(tmpRatio>=0.06){note.Format(L"%4.2fM",tmpFreqH);pDC->TextOutW(xtmp-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注//如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%,//用灰色虛線(xiàn)畫(huà)出中間頻率線(xiàn)if(tmpRatio>=0.10){CPengrayPen(PS_DOT,0.5,RGB(192,192,192));CPen*pDotPen=pDC->SelectObject(&grayPen);//灰色畫(huà)筆doublegrayInc;if(tmpRatiov0.15)graylnc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)elseif(tmpRatio>=0.15&&tmpRatiovO.2O)grayInc=(tmpFreqH-tmpFreqL)/4;//畫(huà)3條灰色虛線(xiàn)elseif(tmpRatio>=0.20)graylnc=(tmpFreqH-tmpFreqL)/6;//畫(huà)3條灰色虛線(xiàn)doublegrayFreqH=tmpFreqL+grayInc;doublegrayFreqL=tmpFreqL;doublegrayLen=tmpRatio*totalLen;doublexgray=xtmp-grayLen;doublegrayRatio;while(tmpFreqH-grayFreqH>0.00001){grayRatio=log10(grayFreqH/grayFreqL)/log10(tmpFreqH/tmpFreqL);xgray+=grayRatio*grayLen;pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH+=grayInc;grayFreqL+=grayInc;}

1卜1pDC->SelectObject(pDotPen);}1tmpFreqL+=tmpFreq;1tmpFreqH+=tmpFreq;卜}1tmpFreq*_10;//tmpFreq代表關(guān)鍵頻率1tmp+=totalLen/totalRatio;卜1}1//繪制標(biāo)準(zhǔn)終止頻率和終止頻率之間的垂直虛線(xiàn)1xtmp_xStdStop;1tmpFreqL_stdStopFreq;1tmpFreqH_2*stdStopFreq;1while((StopFreq-tmpFreqH)>0.000001)白{1tmpRatio_log10(tmpFreqH/tmpFreqL)/totalRatio;1xtmp+_tmpRatio*totalLen;1pDC->MoveTo(xtmp,ORIGIN_Y);1pDC->LineTo(xtmp,COORDTOP);//繪制虛線(xiàn)1if(tmpRatio>_0.06)申{1note.Format(L"%4.2fM",tmpFreqH);1pDC->TextOutW(xtmp-15,ORIGINY+5,note);//坐標(biāo)標(biāo)注卜1}1//如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%1//用灰色虛線(xiàn)畫(huà)出全部中間頻率線(xiàn)1if(tmpRatio>_0.10)申{1CPengrayPen(PS_DOT,0.5,RGB(192,192,192));11CPen*pDotPen_pDC->SelectObject(&grayPen);//灰色畫(huà)筆11doublegrayInc;1if(tmpRatiov0.15)graylnc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)I elseif(tmpRatio>=0.15&&tmpRatiov0.20)graylnc=(tmpFreqH-tmpFreqL)/4;//畫(huà)3條灰色虛線(xiàn)I elseif(tmpRatio>=0.20)graylnc=(tmpFreqH-tmpFreqL)/6;//畫(huà)5條灰色虛線(xiàn)I doublegrayFreqH=tmpFreqL+grayInc;I doublegrayFreqL=tmpFreqL;I doublegrayLen=tmpRatio*totalLen;//要畫(huà)灰色虛線(xiàn)頻率之間的距離I doublexgray=xtmp-grayLen;I doublegrayRatio;I while(tmpFreqH-grayFreqH>0.000001){grayRatio=log10(grayFreqH/grayFreqL)/log10(tmpFreqH/tmpFreqL);xgray+=grayRatio*grayLen;pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH+=grayInc;grayFreqL+=grayInc;}IpDC->SelectObject(pDotPen);}ItmpFreqL+=stdStopFreq;tmpFreqH+=stdStopFreq;}II //黑色虛線(xiàn)和終止頻率之間的灰色虛線(xiàn)I //如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%I //用灰色虛線(xiàn)畫(huà)出全部中間頻率線(xiàn)tmpRatio=log10(StopFreq/tmpFreqL)/totalRatio;I if(tmpRatio>=0.10){CPengrayPen(PS_DOT,0.5,RGB(192,192,192));CPen*pDotPen=pDC->SelectObject(&grayPen);//灰色畫(huà)筆I doublegrayInc;I if(tmpRatiov0.15)grayInc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)I elseif(tmpRatio>=0.15&&tmpRatiov0.20)grayInc=(tmpFreqH-tmpFreqL)/4;//畫(huà)2條灰色虛線(xiàn)I elseif(tmpRatio>=0.20&&tmpRatiov0.25)grayInc=(tmpFreqH-tmpFreqL)/6;//畫(huà)5條灰色虛線(xiàn)I elseif(tmpRatio>=0.25&&tmpRatiov0.30)grayInc=(tmpFreqH-tmpFreqL)/8;//畫(huà)7條灰色虛線(xiàn)I elseif(tmpRatio>=0.30&&tmpRatio<0.4)grayInc=(tmpFreqH-tmpFreqL)/9;//畫(huà)8條灰色虛線(xiàn)I elseif(tmpRatio>=0.40)grayInc=(tmpFreqH-tmpFreqL)/10;//畫(huà)9條灰色虛線(xiàn)I doublegrayFreqH=tmpFreqL+grayInc;I doublegrayFreqL=tmpFreqL;I doublexgray=xtmp;I doublegrayRatio;I while(StopFreq-grayFreqL>0.000001){grayRatio=log10(grayFreqH/grayFreqL)/log10(StopFreq/tmpFreqL);xgray+=(COORD_RIGHT-xtmp)*grayRatio;pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH+=grayInc;grayFreqL+=grayInc;}pDC->SelectObject(pOldPen);}Ielse//起始頻率和終止頻率在同一數(shù)量級(jí),如StartFreq=200,StopFreq=500白{pDC->MoveTo(COORD_RIGHT,ORIGIN_Y);pDC->LineTo(COORD_RIGHT,COORD_TOP);//最右端邊界線(xiàn)note.Format(L"%4.2fM",StopFreq);pDC->TextOutW(COORD_RIGHT-15,ORIGIN_Y+5,note);//坐標(biāo)標(biāo)注1CPendotPen(PS_DOT,1,RGB(0,0,0));11CPen*pOldPen=pDC->SelectObject(&dotPen);doubleunitLen=totalLen/totalRatio;//標(biāo)準(zhǔn)頻率之間應(yīng)有的距離IdoublexStdStop=ORIGIN_X-log10(StartFreq/stdStopFreq)*unitLen;//標(biāo)準(zhǔn)終止頻率(此時(shí)在起始頻率的左邊)的X坐標(biāo)I double xtmp=xStdStop;I double tmpFreqH=2*stdStopFreq;I double tmpFreqL=stdStopFreq;I double tmpRatio;I //根據(jù)標(biāo)準(zhǔn)終止頻率(此時(shí)在起始頻率的左邊)繪制標(biāo)準(zhǔn)虛線(xiàn)Iwhile((StartFreq-tmpFreqH>0.000001))//找到第一根標(biāo)準(zhǔn)虛線(xiàn)的X坐標(biāo){tmpRatio=log10(tmpFreqH/tmpFreqL);xtmp+=tmpRatio*unitLen;tmpFreqH+=stdStopFreq;tmpFreqL+=stdStopFreq;}IIwhile(StopFreq-tmpFreqL>0.000001){tmpRatio=log10(tmpFreqH/tmpFreqL);I if(tmpFreqL>StartFreq){pDC->MoveTo(xtmp,ORIGIN_Y);pDC->LineTo(xtmp,COORD_TOP);//繪制虛線(xiàn)if(tmpRatio>=0.06){note.Format(L"%4.2fM",tmpFreqL);pDC->TextOutW(xtmp-15,ORIGIN_Y+5,note);〃坐標(biāo)標(biāo)注}}//如果兩個(gè)頻率之間的間隔所占長(zhǎng)度大于等于橫坐標(biāo)全長(zhǎng)的10%I //用灰色虛線(xiàn)畫(huà)出全部中間頻率線(xiàn)I doublegrayTmpRatio=tmpRatio/log10(StopFreq/StartFreq);I if(grayTmpRatio>=0.10){CPengrayPen(PS_DOT,0.5,RGB(192,192,192));CPen*pDotPen=pDC->SelectObject(&grayPen);//灰色畫(huà)筆doublegrayInc;I if(grayTmpRatiov0.15)grayInc=(tmpFreqH-tmpFreqL)/2;//畫(huà)1條灰色虛線(xiàn)I elseif(grayTmpRatio>=0.15&&grayTmpRatiov0.20)grayInc=(tmpFreqH-tmpFreqL)/4;//畫(huà)2條灰色虛線(xiàn)I elseif(grayTmpRatio>=0.20&&grayTmpRatiov0.25)grayInc=(tmpFreqH-tmpFreqL)/6;//畫(huà)5條灰色虛線(xiàn)I elseif(grayTmpRatio>=0.25&&grayTmpRatiov0.30)grayInc=(tmpFreqH-tmpFreqL)/8;//畫(huà)7條灰色虛線(xiàn)I elseif(grayTmpRatio>=0.30&&grayTmpRatiov0.35)grayInc=(tmpFreqH-tmpFreqL)/9;// 畫(huà)8條灰色虛線(xiàn)I elseif(grayTmpRatio>=0.35)grayInc=(tmpFreqH-tmpFreqL)/10;//畫(huà)9條灰色虛線(xiàn)I doublegrayFreqH=tmpFreqL+grayInc;I double grayFreqL=tmpFreqL;I double grayLen=tmpRatio*unitLen;//要畫(huà)的灰色虛線(xiàn)頻率之間的距離I double xgray=xtmp;I double grayRatio;I while((tmpFreqH-grayFreqH>0.000001) &&grayFreqHvStopFreq)白 {grayRatio=log10(grayFreqH/grayFreqL)/log10(tmpFreqH/tmpFreqL);xgray+=grayRatio*grayLen;pDC->MoveTo(xgray,ORIGIN_Y);pDC->LineTo(xgray,COORD_TOP);//繪制灰色虛線(xiàn)grayFreqH+=grayInc;grayFreqL+=grayInc;}1pDC->SelectObject(pDotPen);}xtmp+=tmpRatio*unitLen;tmpFreqH+=stdStopFreq;tmpFreqL+=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論