C趣味编程之绘制余弦曲线

上一篇 / 下一篇  2012-08-09 10:03:59 / 个人分类:C++

51Testing软件测试网&R,e j:]{?,f'R

  最近看到一本C趣味编程的书,感觉还挺有趣的,就在这记记吧51Testing软件测试网L hE:w"^

51Testing软件测试网;r Z1vX$v`g)o

  1、用“*”绘制0°~360°的余弦曲线。

~9iub e0

:B2_$xPz0  咋一看这个题目有点傻眼,这怎么绘制,简单考虑,在纸上画了下余弦曲线,发现曲线是0~180°和180°~360°对称的。51Testing软件测试网(oCEoea%{

51Testing软件测试网;rq{&?*{1HC$N

  本来每一行需要画两个点,由于对称,只需算出一个点的位置,然后对称过去画出就可以了

4OAUW7wt pXR&L0~9O0

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

$QcPqb|5^0

  然后我们就可以编程啦51Testing软件测试网X4j%`U]Ex'M$|6Y

51Testing软件测试网5aP~%T?7C

#include <stdio.h>
D"}n Xf!\XU0#include <math.h>
51Testing软件测试网"`_W(HX,[%D%w&iP

51Testing软件测试网H L,E `*@0N A

int main(void)
'R3K/? aj'lR0{51Testing软件测试网'azYfe9_]:v
    double y;
c8qQ|8j&F)Km0    int x,m;51Testing软件测试网 h6_.X n P f)K8C(H7FV*X
    for (y=1;y>=-1;y-=0.1) //y从1到-1就不解释了吧
;LA/e#Rwti0    {51Testing软件测试网v&WB#_$qbSw [
        m=acos(y)*10; //根据y算出x 10是放大系数51Testing软件测试网\^K$O r&BD;i
        for (x=1;x<m;x++)51Testing软件测试网d"l2hLml/_7V
            printf(" ");
/`E"]L4T1} |"w~0        printf("*");
|&mw g*@ob0        for ( ;x<62-m;x++) //做对称处理
wT:?wU'wv0            printf(" ");51Testing软件测试网-Y^al!}cTi^
        printf("*\n");
2p:N M |*Q4tg!U!Z]5i0    }
R7X4Kp]"h%]ve0    return 0;51Testing软件测试网.WeO%`U7V/W#j
}
51Testing软件测试网`?.k!p6u7k

  得到的图形是这个样子的51Testing软件测试网V+P|9u@*F e8CH

51Testing软件测试网r2g8b(^;rO

51Testing软件测试网t ~ lN#EIO0D

i#};P9Yja4[0  下面是思考时间:51Testing软件测试网 JI0L7A+O:w ard&J1|[

51Testing软件测试网 }1c A:u!{j:@5C

  怎么来画sin x的图像?51Testing软件测试网#p\s/_5v(`O g

51Testing软件测试网A]$[0l+T|J1{'k

  来,同样的,先画画标准图像。51Testing软件测试网{| K!~#R(dcG

51Testing软件测试网*c,H?0ZVV

  我的思路是这样子的。0°~90°,90°到180°是对称的,和上面一样的画法。51Testing软件测试网r+AMmG$|4e3A

  由于asin()函数算出的x值是在-180°~180°之间的(反三角函数,高中数学没学好的自闭去),所以可以考虑吧-180°~0°图像移到90°的后面就行了。51Testing软件测试网5Rq9A5]y9s)? K

  我写的程序是这样子的:51Testing软件测试网KlZz7iO0y z

51Testing软件测试网PX~/~W+lG

Q)f+[.q!^*i0#include <stdio.h>51Testing软件测试网5UnN.Hn:y@b
#include <math.h>
51Testing软件测试网9z u&?Du5]@]F(J

51Testing软件测试网E)dU,P9x7CT xV

int main(void)
)\b;Ge7hu1Z/c0{
+n*\ l{btON9Y8X0    double y;
m6k g1M Li0    int x,m;51Testing软件测试网 fzOi%n(I1K"V
    for (y=1;y>=0;y-=0.1)
*h D5Z6Q F)_/k0    {51Testing软件测试网T4f.B(Y2y"}7e
        m=asin(y)*10;51Testing软件测试网8O Dt^l
        for (x=1;x<m;x++)51Testing软件测试网#j-nXi5UMy
            printf(" ");
U[1bg;^*G@p'N;O0H0        printf("*");
7N:[ ~4Xt;m~i&\0        for ( ;x<31-m;x++)
R'`L3V6mFn)_+~0            printf(" ");51Testing软件测试网O?rk2| l j
        printf("*\n");51Testing软件测试网 P H$Tj7iu s
    }51Testing软件测试网;pb&jd#j?_4p
    for (y=0;y>=-1;y-=0.1)51Testing软件测试网7S j @R+XTg3Y
    {51Testing软件测试网}RZ9nDk
        m=asin(y)*-10+31+2;51Testing软件测试网;l;g#r)KIsI
        for (x=1;x<m;x++)
G8m/t*MXo0            printf(" ");
x+~U6P,^s)v0        printf("*");
i9I'\8S$zw0        for(;x<62+33-m;x++)
T e6W.w+Q0            printf(" ");51Testing软件测试网~ D(_Ei*LQfi{
        printf("*\n");51Testing软件测试网OwN0WX#`3U^4c
    }51Testing软件测试网6LHO_ lW
    return 0;51Testing软件测试网xu.Z%xZZ
}
51Testing软件测试网F%d9g\%c2X X

  图形是:51Testing软件测试网7C8Z)~ e8t(xr

51Testing软件测试网4W S(hHY4i*k

  画sin其实还可以考虑图形的中心对称,有另外的思路,我就不阐述了。51Testing软件测试网Q:l H3F[kgp-e2X


TAG:

 

评分:0

我来说两句

Open Toolbar