C趣味編程之繪製餘弦曲線

最近看到一本C趣味編程的書,感覺還挺有趣的,就在這記記吧

1、用“*”繪製0°~360°的餘弦曲線。

咋一看這個題目有點傻眼,這怎麼繪製,簡單考慮,在紙上畫了下餘弦曲線,發現曲線是0~180°和180°~360°對稱的。

本來每一行需要畫兩個點,由於對稱,只需算出一個點的位置,然後對稱過去畫出就可以了

假設列寬位62,360°=2π≈6.2,大笑我想大家都懂得。

然後我們就可以編程啦

#include <stdio.h>
#include <math.h>

int main(void)
{
    double y;
    int x,m;
    for (y=1;y>=-1;y-=0.1) //y從1到-1就不解釋了吧
    {
        m=acos(y)*10; //根據y算出x 10是放大係數
        for (x=1;x<m;x++)
            printf(" ");
        printf("*");
        for ( ;x<62-m;x++) //做對稱處理
            printf(" ");
        printf("*\n");
    }
    return 0;
}
得到的圖形是這個樣子的


下面是思考時間:

怎麼來畫sin x的圖像?

來,同樣的,先畫畫標準圖像。

的思路是這樣子的。0°~90°,90°到180°是對稱的,和上面一樣的畫法。

由於asin()函數算出的x值是在-180°~180°之間的(反三角函數,高中數學沒學好的自閉去),所以可以考慮吧-180°~0°圖像移到90°的後面就行了。

我寫的程序是這樣子的:

#include <stdio.h>
#include <math.h>

int main(void)
{
    double y;
    int x,m;
    for (y=1;y>=0;y-=0.1)
    {
        m=asin(y)*10;
        for (x=1;x<m;x++)
            printf(" ");
        printf("*");
        for ( ;x<31-m;x++)
            printf(" ");
        printf("*\n");
    }
    for (y=0;y>=-1;y-=0.1)
    {
        m=asin(y)*-10+31+2;
        for (x=1;x<m;x++)
            printf(" ");
        printf("*");
        for(;x<62+33-m;x++)
            printf(" ");
        printf("*\n");
    }
    return 0;
}
圖形是:



畫sin其實還可以考慮圖形的中心對稱,有另外的思路,我就不闡述了微笑

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