C++有關MFC在直角座標系中畫數學函數(簡易版)

這是之前做的一個在直角座標系中畫數學函數得小程序。

首先我的講一下畫筆的畫圖規則:

例:

我們開始建立一個畫布時他的座標原點在左上角,爲了方便我我們正常的畫圖

我們的重新設置座標原點

代碼如下:

pDC-> SetViewportOrg(point/2,point/2);//設置中心座標

MoveTo(x,y);//起點

LineTo(x,y);//連線的點

TextOut(x,y,a);//a爲所顯示的內容

 

 

而這個程序的主要思想其實就是不斷得在界面上畫圖。圖中得網格,刻度

都是用畫筆畫的:

網格:

CPen *pPenblue = new CPen(); //創建畫筆對象

pPenblue ->CreatePen(PS_SOLID, 1, RGB(0, 0, 255)); //藍色畫筆

pDC ->SelectObject(pPenblue);

for(int z=0;z<=point/10;z++)

{

pDC ->MoveTo(-point/2,-point/2+10*z);

pDC ->LineTo(point/2,-point/2+10*z);

pDC ->MoveTo(-point/2+10*z,-point/2);

pDC ->LineTo(-point/2+10*z,point/2);

}

point的其實就是控制畫布大小的,用來放大和縮小,刻度的位置確定等,貫穿整個程序。

畫函數圖像:

先確定起點第一個起點,再連接到第一個終點,在確定第二個起點,連接到第二個終點,其實第二個的起點就是第一個的終點,依次類推,for()其實就是用來確定範圍的

代碼如下:

//確定畫筆起點

for(x=-point/2*100;x<=point/2*100;x++)

{

    m=x*0.01;

    y=(atof(a)*pow(m,4)+atof(b)*pow(m,3)+atof(c)*pow(m,2)+atof(d)*m+atof(e))*(point/20);//表達式

    y=y+(u-1)*(point/20)-f*(point/20);

    m=m*(point/20)+(point/20)*(r-1)-(point/20)*(l-1);

            if(y<point/2&&y>-point/2&&m>-(point/2)&&m<(point/2))//規定畫圖範圍

          {

               pDC ->MoveTo(m,y);

              break;

         }

}

for(int x=-point/2*100;x<=point/2*100;x++)//確定連線的點

{

            m=x*0.01;

            y=(atof(a)*pow(m,4)+atof(b)*pow(m,3)+atof(c)*pow(m,2)+atof(d)*m+atof(e))*(point/20);//表達式

            y=y+(u-1)*(point/20)-f*(point/20);

            m=m*(point/20)+(point/20)*(r-1)-(point/20)*(l-1);

             if(y<point/2&&y>-point/2&&m>-(point/2)&&m<(point/2))//規定畫圖範圍

            {

               pDC ->LineTo(m,y); //豎起軸

            }

}

改程序中還實現了上下左右放大和縮小的功能:

放大縮小:

就像我剛剛所說的一樣,通過調節point值得大小,來放大和縮小所畫圖像得大小。

上下左右:

通過定義幾個變量,放比例調節幾個變量得大小

u=1,f=1,l=1,r=1;

U是用來向上移動用的

f是向下移動用的

l向左移動用的

r是向右移動用的

例向下移動:

向下和向左得數值是負的,所以f,l的值要減去。

沒次按下向下的鍵,所以f++;f的值就增大。

代碼如下:

for(x=-point/2*100;x<=point/2*100;x++)

{

    m=x*0.01;

    y=(atof(a)*pow(m,4)+atof(b)*pow(m,3)+atof(c)*pow(m,2)+atof(d)*m+atof(e))*(point/20);//表達式

    y=y+(u-1)*(point/20)-f*(point/20);

     m=m*(point/20)+(point/20)*(r-1)-(point/20)*(l-1);

   if(y<point/2&&y>-point/2&&m>-(point/2)&&m<(point/2))//規定畫圖範圍

   {

        pDC ->MoveTo(m,y);

        break;

    }

}

for(int x=-point/2*100;x<=point/2*100;x++)//確定連線的點

{

           m=x*0.01;

            y=(atof(a)*pow(m,4)+atof(b)*pow(m,3)+atof(c)*pow(m,2)+atof(d)*m+atof(e))*(point/20);//表達式

            y=y+(u-1)*(point/20)-f*(point/20);

            m=m*(point/20)+(point/20)*(r-1)-(point/20)*(l-1);

            if(y<point/2&&y>-point/2&&m>-(point/2)&&m<(point/2))//規定畫圖範圍

            {

                  pDC ->LineTo(m,y); //豎起軸

            }

}

f++;

希望對大家有幫助!!!

源代碼下載:https://download.csdn.net/download/qq_38977566/10794602

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章