五边形信息图表绘制方法

五边形信息图表绘制方法
在网络科技发展进步的当下,原来一些传统的统计图表都有了进一步的创新。以前企业的PPT都依赖微软的各应用软件来制作图表,现时企业的PPT展示的图表应用不再满足于原来的图表绘制方法,进而使用一些第三方应用软件来制作新颖漂亮的图表。由此而有许多图表制作的应用软件面市。这些图表很吸引眼球,我对此也很感兴趣,故试着写了一些各种式样图表的绘制方法,供有同好的同行参考和评论。

新样式的统计图除了有复合式,堆叠式,展开式等等,还加入了新的概念,新的形式。新的名称是信息图表,把各种需要表达的东西,如理念含义,样本值的数量,统计的目的,多重信息等等用图像图表图案组合起来,展现给受众。此类信息图主要是表达,展示和传播。在美工艺术方面创意创新,有许多独到新颖的样式,给人一个赏心悦目的感受。

在统计图表的样本值的计算方面,样本值的量的表现是一个方面,重点是量的对比,以及量的表现方法,这是体现统计图表目的的主要意义。
今在此提供一种新颖漂亮的信息图表的绘制方法,对于统计样本数据使用者自行添加。 

如何绘制五边形,各个能绘画的应用程序和编程语言都有自己的方法,然而由于我喜欢动脑,喜欢电脑绘画,就会设计一些自己的方法。在设计绘制方法时因为要多次绘制五边形,故写了个通用函数Pentagon () 。
今给大家分享一个中心是五角星的五边形信息图表的绘制方法,供大家参考。

本方法采用C语言的最基本功能:
( 1) 绘图功能画线,画圆,画矩形。
(2) 界面美工设计,界面文字打印输出。
代码中有详细的注释,通俗易懂,一看就会。

源码如下:(附图)

4aa470cbff644bba84baf1c70277a7b6.png
//*************************      
//创意艺术正五边形信息图表绘制方法
drawPentagon1 (){      //中心为五角星形
     cs.ClearDraw (0,src);   //清屏
      clearOutput();
      cs.SetFillMode (1);//0不填色,1填色
         cs.SetColor (255,230,250,250);
      cs.DrawRect (0,2,720,880);   //back board
         cs.SetColor (255,140,140,140);
      cs.DrawRect (24,24,706,806);   //back      
         cs.SetColor (255,250,250,250);
      cs.DrawRect (20,20,700,800);   //back 
      cs.SetFillMode (0);//0不填色,1填色
         cs.SetColor (255,0,0,250);
      cs.DrawRect (20,20,700,800);   //back 
      cs.DrawRect (26,25,694,795);   //back 

 

 // 正五边形绘制
     cs.SetFillMode (1);//0不填色,1填色
     cs.SetStrokeWidth(2);    //线
     dx=360 ;  dy=360 ;   //center
      L1=200 ;  Ls=124 ;    //12点钟方向
         cs.SetFillMode (0);//0不填色,1填色
    for (i=0; i<=200; i++){   //中心五角星
           cr=250-i; cg=i+50;  cb=100;  //渐变色
        cs.SetColor(255,cr, cg, cb);  
        cs.DrawCircle (dx,dy, i);    }

 //**** draw five Pentagon *****
     cs.SetFillMode (1);//0不填色,1填色
               d=72+90 ;  //d +90 , 12点钟方向
     for (i=0; i<=4; i++){    
          ma=pi/180*i*72+pi/180*90 ;
           x0=(float)(L1*cos(ma))+dx ;   
           y0=(float)(L1*sin(ma))+dy ;
          kn=(int)Ls ;   x=x0;  y=y0;    //set steps
    for (n=0; n<=kn; n++){   //fill pentagon
     cs.SetColor(255,200,250,250);  //set fill color
          Ls=n;            
          Pentagon ();   }  
     cs.SetColor(255,250,150,0);  //套框线
          Pentagon ();   }  

//打印标号
           cs.SetTextStyle (1);
      for (n=0; n<=4; n++){    //draw 标号
           ma=pi/180*n*72+180 ;
           d=n*72+90;   Ls=124;
           x5=(float)(130*cos(ma))+dx ;   
           y5=(float)(130*sin(ma))+dy ;
               cs.SetColor(255,250,200,0);  
           cs.DrawCircle (x5,y5,31) ;     
               cs.SetColor(255,0,250,250);  
           cs.DrawCircle (x5,y5,29) ;     
               cs.SetTextSize (36);
           cs.SetColor(255,150,80,220);  
           ss="0"+intToString (n+1);
           cs.DrawText (ss, x5-20 ,y5+12 ) ;     }

        cs.SetTextSize (38);
      cs.DrawText ("🏘",222,140) ;
      cs.DrawText ("🍎",455,140) ;
      cs.DrawText ("📚",110,410) ;
      cs.DrawText ("🚑",560,410) ;
      cs.DrawText ("🔬",340,620) ;

            cs.SetTextSize (30);
        cs.DrawText ("房产 ", 180,200) ;
        cs.DrawText ("生活 ", 420,200) ;
        cs.DrawText ("教育 ", 110,470) ;
        cs.DrawText ("医疗 ", 490,470) ;
        cs.DrawText ("工作 ", 300,570) ;
        cs.DrawText ("45% ", 250,200) ;
        cs.DrawText ("20% ", 490,200) ;
        cs.DrawText ("14% ", 175,470) ;
        cs.DrawText ("11% ", 560,470) ;
        cs.DrawText ("10% ", 370,570) ;


      cs.SetTextSize (50);
          cs.SetColor(255,250,250,250);     
      cs.DrawText ("👪",330,330) ;
      cs.DrawLine (295,382,425,382);
           cs.SetTextSize (24);
      cs.DrawText ("Infographics",290,370) ;
      cs.DrawText ("2024 ", 335,410) ;

 //题标:  艺术立体字制作
      cs.SetFillMode (1);//0不填色,1填色
      cs.SetTextStyle (1);
      cs.SetStrokeWidth(1);
      cs.SetTextSize (28);
      cs.SetColor(255,0,0,250);      
      cs.DrawText ("Infographics 📊",480,60) ;
      cs.SetTextSize (42);
           ss="创意艺术图:五边形艺术图" ;
      cs.SetColor(255,50,120,20);      //立体字
           cs.DrawText (ss,114,734);    //阴影
      cs.SetColor(255,0,250,0);
           cs.DrawText (ss,110,730);    //本字
      cs.SetFillMode (0);//0不填色,1填色
      cs.SetColor(255,250,150,0);
           cs.DrawText (ss,110,730);    //框线
       cs.Update ();
  }//drawPentagon1 ()

Pentagon (){    //正五边形绘制方法通用函数
// a=pi/180*i*72 ; 或a=pi/180*i*2 ;  > 画五角星 
//d=0 >3点钟,  d=180 >9点钟  ,d=90 >12点钟
//d=270 >6点钟
//x, y 坐标,Ls=Length, d=Degree 起点
//绘制的方法是圆内切五边形,为方便我不计算证明,直接以半径来代替边长了。我的目的是图形,不是如CAD的需要精确计算。
//4个参数 ( flaot x, y, L ;   int d ;  )
        a=pi/180-pi/180*d ;   
          x3=(float)(Ls*cos(a))+x ;   //起始0点
          y3=(float)(Ls*sin(a))+y ;
       // cs.DrawCircle(x3,y3,1);    //此点可加
            x5=x3 ;   y5=y3 ;

   for (m=1; m<=4; m++){   //五边点后4点位
          a=pi/180*m*72-pi/180*d ;   
          x4=(float)(Ls*cos(a))+x ;
          y4=(float)(Ls*sin(a))+y ;   //顺时针
       // cs.DrawCircle(x4,y4,1);    //此点可加
          cs.DrawLine (x5,y5,x4,y4);   //连线 
             x5=x4;  y5=y4 ;    }   
 
         cs.DrawLine (x5,y5,x3,y3);   //连线0点
}//Pentagon ()

 

//**** END *****************
 

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现五边形图表,您可以使用 CustomPainter 类来自定义绘制五边形的图形。以下是一个示例代码,可以让您开始实现五边形图表: ```dart import 'dart:math'; import 'package:flutter/material.dart'; class PentagonChart extends StatelessWidget { final List<double> data; PentagonChart({this.data}); @override Widget build(BuildContext context) { return CustomPaint( painter: PentagonPainter(data), child: Container(), ); } } class PentagonPainter extends CustomPainter { final List<double> data; final Paint pentagonPaint; final Paint linePaint; PentagonPainter(this.data) : pentagonPaint = Paint() ..color = Colors.blue.withOpacity(0.3) ..style = PaintingStyle.fill, linePaint = Paint() ..color = Colors.blue ..style = PaintingStyle.stroke ..strokeWidth = 2.0; @override void paint(Canvas canvas, Size size) { // 计算五边形中心点 Offset center = Offset(size.width / 2, size.height / 2); // 计算五边形半径 double radius = min(size.width, size.height) / 2; // 计算五边形顶点坐标 List<Offset> vertices = List.generate( 5, (i) { double x = center.dx + radius * cos(2 * pi / 5 * i - pi / 2); double y = center.dy + radius * sin(2 * pi / 5 * i - pi / 2); return Offset(x, y); }, ); // 绘制五边形 Path path = Path(); path.moveTo(vertices[0].dx, vertices[0].dy); for (int i = 1; i < 5; i++) { path.lineTo(vertices[i].dx, vertices[i].dy); } path.close(); canvas.drawPath(path, pentagonPaint); // 绘制五边形边线 for (int i = 0; i < 5; i++) { canvas.drawLine(vertices[i], vertices[(i + 1) % 5], linePaint); } // 绘制五边形对角线 for (int i = 0; i < 5; i++) { canvas.drawLine(center, vertices[i], linePaint); } // 绘制数据标记点 for (int i = 0; i < 5; i++) { double x = center.dx + radius * data[i] * cos(2 * pi / 5 * i - pi / 2); double y = center.dy + radius * data[i] * sin(2 * pi / 5 * i - pi / 2); canvas.drawCircle(Offset(x, y), 6.0, linePaint); } } @override bool shouldRepaint(CustomPainter oldDelegate) { return true; } } ``` 在上面的示例代码中,我们定义了两个 Paint 对象,一个用于绘制五边形的填充,一个用于绘制五边形的边线和数据标记点的圆圈。然后在 PentagonPainter 类的 paint 方法中,我们计算五边形的中心点、半径和顶点坐标,并使用这些参数绘制五边形。最后,我们根据传入的数据,计算出每个数据点在五边形中的位置,并使用圆圈标记绘制出来。 要使用 PentagonChart 类,只需要在 Widget 树中添加一个 PentagonChart 对象,并传入一个包含五个数据点的 List 即可: ```dart PentagonChart(data: [0.8, 0.5, 0.6, 0.9, 0.7]) ``` 这将会绘制一个五边形图表,并将五个数据点分别标记在五边形的顶点处。您可以根据需要修改绘制五边形和数据标记点的样式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值