1. 程式人生 > >利用C語言實現sin(x)曲線與cos(x)曲線圖形的同時顯示

利用C語言實現sin(x)曲線與cos(x)曲線圖形的同時顯示

    在前面兩天的部落格中,我們學會了如何用C語言分別繪製sin(x)和cos(x)在0°~360°的曲線。

    今天我們來試試將兩條曲線同時繪製出來。

要求:

    在螢幕上顯示0°~360°的cos(x)曲線與sin(x)曲線的疊加圖形。其中cos(x)圖形用“*”表示,sin(x)圖形用“+”表示,在兩個圖形的交點處則用“*”表示。

問題分析與演算法設計:

圖形疊加的關鍵是要在分別計算出同一行中兩個圖形的列方向點座標後,正確判斷相互的位置關係。為此,可以預先判定圖形的交點,在分別控制列印兩個不同的圖形。

具體程式:

#include <stdio.h>
#include <math.h>
#define PAI 3.141592


int main()
{//定義變數


    int a,b,x;
    double y,n;

//列印x軸上半部分
    for(y = 1; y >= 0; y -= 0.1)
    {
        a = acos(y)*10;
        b = asin(y)*10;
        for(x = 0; x <= 62; x++)
        {
            if(x <= 31)
                if((x == a && x == b) || (x == a && x == (31-b))) printf("+");
                else if(x == a) printf("*");
                       else if(x == b || x == (31-b)) printf("+");
                              else printf(" ");
            else if((x == (62-a) && x == b) || (x == (62-a) && x == (94-b))) printf("+");
                   else if(x == (62-a)) printf("*");
                          else if(x == b || x == (94-b)) printf("+");
                                 else printf(" ");
        }
        printf("\n");
    }

 //列印x軸下半部分
    for( ; y >= -1; y -= 0.1)
    {
        a = acos(y)*10;
        n = asin(-y);
        b = (PAI + n)*10;
        for(x = 0; x <= 62; x++)
        {
            if(x <= 31)
                if((x == a && x == b) || (x == a && x == (31-b))) printf("+");
                else if(x == a) printf("*");
                       else if(x == b || x == (31-b)) printf("+");
                              else printf(" ");
            else if((x == (62-a) && x == b) || (x == (62-a) && x == (94-b))) printf("+");
                   else if(x == (62-a)) printf("*");
                          else if(x == b || x == (94-b)) printf("+");
                                 else printf(" ");
        }
        printf("\n");
    }
    return 0;
}

執行結果:


(為了方便大家讀懂程式,這裡附上兩個圖形的上點的相對位置關係,即:分情況討論的分界點的取值。見下圖)


今天就到這裡啦,大家晚安睡覺