利用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;
}


运行结果:



(为了方便大家读懂程序,这里附上两个图形的上点的相对位置关系,即:分情况讨论的分界点的取值。见下图)




今天就到这里啦,大家晚安睡觉


  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值