C语言绘制曲线图的示例代码

 更新时间:2024年02月25日 09:38:58   作者:老花眼猫  
这篇文章主要介为大家详细绍了如何使用C语言绘制统计图中的曲线图,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

统计图曲线图绘制方法

常用的统计图有条形图、柱形图、折线图、曲线图、饼图、环形图、扇形图。

前几类图比较容易绘制,饼图环形图绘制较难。

曲线图的曲线绘制较难,今提供曲线图的绘制方法供参考。

本方法采用C语言的最基本功能:

( 1) 绘图功能画线,画圆,画长方形。

(2) 界面美工设计,界面文字打印输出。

代码中有详细的注释,通俗易懂,一看就会。

效果图

实现代码

下面提供2个绘制曲线图的代码:

//变量: 可设置成全局变量或私有变量
Canvas cs ;     //画布,绘制图表载体
float pi=3.1415926535 ;
float a ;            //三角函数 sin (a), cos (a), 
float r ;             //圆半径 radius
int i, j, n ;
float x0,y0,x1,y1 ;  //作图坐标
float dx,dy ;             //中心坐标
string ss, ss1, ss2 ;         //打印文字
 int p[6] ;        //set data or  input  data
double pn ;   //显示数据
 
//*************************  

CurveGraph6 (){   //曲线图 6
      cs.ClearDraw (0,src);   //清屏
      clearOutput();
      selectStyle () ; //图例样式选项设置
      cs.SetFillMode (1);//0不填色,1填色
      cs.SetColor (255,250,250,250);
      cs.DrawRect (0,4,720,600);   //back board
      cs.SetColor (255,140,140,140);
      cs.DrawRect (24,24,706,586);   //back      
      cs.SetColor (255,250,250,250);
      cs.DrawRect (20,20,700,580);   //back 

      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor (255,0,0,240);
      cs.DrawRect (20,20,700,580);   //框线
      cs.DrawRect (24,24,696,576);   //框线

      cs.SetFillMode (1);//0不填色,1填色
      cs.SetStrokeWidth(1);
      cs.SetColor(255,220,220,220);
      for (j=0; j<=10 ; j++){   
      for (i=0; i<=7 ; i++){   
          dx=j*50+100 ;
          dy=i*50+50 ;
          cs.DrawRect(dx,dy,dx+49,dy+49);  }  }//grid

           cs.SetTextStyle (0);
           cs.SetColor(255,0,0,250);
      cs.DrawRect (50,450,670,452);   //X线
      cs.DrawRect (99,48,101,450);   //Y线
          cs.SetColor(255,250,0,0);
          cs.SetTextSize (18);
     cs.DrawRect (90,249,670,251);   //standard线
      cs.DrawText ("0.75", 52 ,109) ;
      cs.DrawText ("0.50", 52 ,159) ;
      cs.DrawText ("0.25", 52 ,209) ;
      cs.DrawText ("0", 65 ,259) ;
      cs.DrawText ("-0.25", 50 ,309) ;
      cs.DrawText ("-0.50", 50 ,359) ;
      cs.DrawText ("-0.75", 50 ,409) ;
 
      cs.SetTextStyle (0);     //画标尺
      cs.SetTextSize (18);
             cs.SetColor(255,50,80,80);
      ss=" 0         30       60        90      120      150 " ;
      ss1=" 180     210     240     270     300     330" ;
      cs.DrawText (ss,90,475) ;
      cs.DrawText (ss1,380,475) ;   //standard
      cs.SetTextSize (24);
      cs.DrawText ("Sec >",30, 475) ;

 //draw Curve graphics  绘制曲线
//* curve : x1 +5 标尺x轴 0 位,  bs*5 步长
//x0 曲线幅宽,   + -pn y轴峰谷弧高,  y+300 x轴y定位
// pn= 0 -- 200 高,bs=50*2
  int bs ;   //步长
//p[1]=150; p[2]=80; p[3]=100; p[4]=50; p[5]=140;
         cs.SetColor (255,0,120,0);
  for (n=1; n<=5; n++){
        bs=n*100-100 ;
        //pn=p[n] ;
        Rn=random ()*90+50 ;
        pn=(int) Rn ;
  for (i=120;i<240;i++){
         a=pi/360*i*6 ;     //360 曲线点密度
         x0=50;
        // pn=170 ;
         x1=(float)((x0/pi*a)+bs);
         y1=(float)(- pn*sin(a)+250);
         cs.DrawCircle(x1,y1,2);   }   }
      cs.Update ();
          sleep (300) ;

  for (n=1; n<=5; n++){
        bs=n*100-100 ;
        Rn=random ()*40+40 ;
        pn=(int) Rn ;
  for (i=120;i<240;i++){
         a=pi/360*i*6 ;     //360 曲线点密度
         x0=50;
         x1=(float)((x0/pi*a)+bs);
         y1=(float)(- pn*sin(a)+250);
            cs.SetColor (255,250,100,160);
         cs.DrawCircle(x1,y1,1);   
            cs.SetColor (255,250,220,150);
         cs.DrawLine (x1,y1,x1,250) ;    }   }

 //draw title
       cs.SetFillMode (1);//0不填色,1填色
       cs.SetTextStyle (1);
       cs.SetStrokeWidth(1);
       cs.SetTextSize (26);
       cs.SetColor (255,0,220,150);
       cs.DrawText ("Curve Chart 📊",470,80) ;
       cs.SetTextSize (50);
           ss="统计图  -  曲线图" ;
       cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,164,534);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,160,530);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,160,530);    //框线
       cs.Update ();
}//CurveGraph6 ()

CurveGraph7 (){    //曲线图 7:填充区域
      cs.ClearDraw (0,src);   //清屏
      clearOutput();
      selectStyle () ; //图例样式选项设置
      cs.SetFillMode (1);//0不填色,1填色
      cs.SetColor (255,250,250,250);
      cs.DrawRect (0,4,720,600);   //back board
      cs.SetColor (255,140,140,140);
      cs.DrawRect (24,24,706,586);   //back      
      cs.SetColor (255,250,250,250);
      cs.DrawRect (20,20,700,580);   //back 

      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor (255,0,0,240);
      cs.DrawRect (20,20,700,580);   //框线
      cs.DrawRect (24,24,696,576);   //框线

      cs.SetFillMode (1);//0不填色,1填色
      cs.SetStrokeWidth(1);
      cs.SetColor(255,220,220,220);
      for (j=0; j<=10 ; j++){   
      for (i=0; i<=7 ; i++){   
          dx=j*50+100 ;
          dy=i*50+50 ;
          cs.DrawRect(dx,dy,dx+49,dy+49);  }  }//grid

          cs.SetTextStyle (0);
          cs.SetTextSize (18);
          cs.SetColor(255,0,0,250);
      cs.DrawRect (50,450,670,452);   //X线
      cs.DrawRect (99,48,101,450);   //Y线
           cs.SetColor(255,250,0,0);
      cs.DrawRect (90,249,670,251);   //standard线
      cs.DrawText ("0.75", 52 ,107) ;
      cs.DrawText ("0.50", 52 ,157) ;
      cs.DrawText ("0.25", 52 ,207) ;
      cs.DrawText ("0", 65 ,257) ;
      cs.DrawText ("-0.25", 50 ,307) ;
      cs.DrawText ("-0.50", 50 ,357) ;
      cs.DrawText ("-0.75", 50 ,407) ;
 
      cs.SetTextStyle (1);     //画标尺
      cs.SetTextSize (18);
            cs.SetColor(255,0,0,0);
      ss=" 0         30       60        90      120      150 " ;
      ss1=" 180     210     240     270     300     330" ;
      cs.DrawText (ss,90,475) ;
      cs.DrawText (ss1,380,475) ;   //standard
      cs.SetTextSize (24);
      cs.DrawText ("Sec >",30, 475) ;

//draw Curve graphics  绘制曲线
//* curve : x1-bs 标尺x轴 0 位,  bs 幅宽
//x0 X轴 0位,   + -pn y轴峰谷弧高,  y+250 x轴y定位
// pn= 0 -- 200,+ - pn> 正弦余弦。bs=幅宽
  int bs ;   //步长
         cs.SetStrokeWidth(1);
         cs.SetColor (255,255,0,0);
   for (i=100;i<283;i++){
       a=pi/360*i*6 ;  //360 完整双曲线,小于为局部段
       // x0=240 ;  bs=300 ;  pn=150 ;  //i=100-285 (1)
       x0=180 ;  bs=200 ;  pn=80 ;  //i=100-283 (2)
       x1=(float)((x0/pi*a)-bs);   //bs=50--300
       y1=(float)(-pn*sin(a)+250); //dy=250 Y轴center
           cs.SetColor (255,255,0,0);
        cs.DrawCircle(x1,y1,2);   
            cs.SetColor (255,0,0,250);
         cs.DrawLine (x1,y1,x1,250) ;      }

  for (n=1; n<=8; n++){    //draw 多条曲线
        Rn=random ()*60+100 ;
        pn=(int) Rn ;
   for (i=100;i<283;i++){
       a=pi/360*i*6 ;  //360 完整双曲线,小于为局部段
       x0=180 ;  bs=200 ;  //pn=80 ;  
       x1=(float)((x0/pi*a)-bs);   //bs=50--300
       y1=(float)(-pn*sin(a)+250); //dy=250 Y轴center
     if (n==1||n==5) cs.SetColor (255,200,0,100);
     if (n==2||n==6) cs.SetColor (255,250,150,100);
     if (n==3||n==7) cs.SetColor (255,0,0,250);
     if (n==4||n==8) cs.SetColor (255,250,100,130);
         cs.DrawCircle(x1,y1,1.5);   }    }

//draw title
      cs.SetFillMode (1);//0不填色,1填色
        cs.SetTextStyle (1);
       cs.SetStrokeWidth(1);
       cs.SetTextSize (26);
      cs.DrawText ("Curve Chart 📊",470,80) ;
      cs.SetTextSize (50);
         ss="统计图  -  曲线图" ;
      cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,164,534);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,160,530);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,160,530);    //框线
       cs.Update ();
}//CurveGraph7 ()

到此这篇关于C语言绘制曲线图的示例代码的文章就介绍到这了,更多相关C语言曲线图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C语言入门篇--初识C语言及数据类型

    C语言入门篇--初识C语言及数据类型

    本篇文章是c语言基础篇,主要为大家介绍了C语言的基本类型,为大家介绍了什么是C语言,希望可以帮助大家快速入门c语言的世界,更好的理解c语言
    2021-08-08
  • 6个变态的C语言Hello World程序

    6个变态的C语言Hello World程序

    这篇文章主要介绍了6个变态的C语言Hello World程序,需要的朋友可以参考下
    2016-05-05
  • C++超详细讲解强制类型转换的用法

    C++超详细讲解强制类型转换的用法

    在C++语言中新增了四个关键字static_cast、const_cast、reinterpret_cast和dynamic_cast。这四个关键字都是用于类型转换的,类型转换(type cast),是高级语言的一个基本语法。它被实现为一个特殊的运算符,以小括号内加上类型名来表示,接下来让我们一起来详细了解
    2022-06-06
  • C语言中的数据整除判断问题

    C语言中的数据整除判断问题

    这篇文章主要介绍了C语言中的数据整除判断问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • C++ 深入浅出探索模板

    C++ 深入浅出探索模板

    人们需要编写多个形式和功能都相似的函数,因此有了函数模板来减少重复劳动;人们也需要编写多个形式和功能都相似的类,于是 C++ 引人了类模板的概念,编译器从类模板可以自动生成多个类,避免了程序员的重复劳动
    2022-04-04
  • 带你深度走入C语言取整以及4种函数

    带你深度走入C语言取整以及4种函数

    大家都知道取整这回事,但是对于取整只有单一的认识,下面这篇文章主要给大家介绍了关于C语言取整以及4种函数的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 深入分析Visual C++进行串口通信编程的详解

    深入分析Visual C++进行串口通信编程的详解

    本篇文章是对Visual C++进行串口通信编程进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • 关于STL中的map容器的一些总结

    关于STL中的map容器的一些总结

    对于map的学习,或者说是对STL中的容器的学习,要知道每种容器的实现原理,每种适合适合解决什么问题的,才是关键
    2013-09-09
  • MFC中Radio Button的用法详解

    MFC中Radio Button的用法详解

    这篇文章主要介绍了MFC中Radio Button的用法,需要的朋友可以参考下
    2014-07-07
  • C++事件处理中的__hook与__unhook用法详解

    C++事件处理中的__hook与__unhook用法详解

    这篇文章主要介绍了C++事件处理中__hook与__unhook的用法,C++中的COM类主要支持事件处理,需要的朋友可以参考下
    2016-01-01

最新评论