gid+实现多种统计图 ,支持负坐标

using System;
using System.Web.UI;
using System.Data;
using System.Web.UI.WebControls;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Web;
using System.ComponentModel;
using System.Collections ;

namespace EI.Control
{
    
/// <summary>
    
///    柱状图控件
    
///    需要传入列表项名,值,超级连接地址
    
/// </summary>

    [ToolboxData("<{0}:Columniation runat=server></{0}:Columniation>")]
    
public class Columniation: System.Web.UI.WebControls.WebControl
    
{  
        
private const int _colorLimit = 12;  //颜色列表
       private Color[] _color = 
            

                Color.Chocolate,
                Color.YellowGreen,
                Color.Olive,
                Color.DarkKhaki,
                Color.Sienna,
                Color.PaleGoldenrod,
                Color.Peru,
                Color.Tan,
                Color.Khaki,
                Color.DarkGoldenrod,
                Color.Maroon,
                Color.OliveDrab
            }
;

        
        
        
        
private DataTable items;//列表项名称和值
       

        
private string text="实时数据";
        
private string datastd="标准值";
        
private string data="实时数据";


        
int kds=10//刻度数
        float kddw=100;  //没刻度大小

        
int zmheight=500//真个图区高
        int zmwidth=740;  //真个图区宽

        
int height=400;//呈现区高
        int width=730;
        
int cxtop=30;//呈现区距顶距离
        int cxleft=30;//呈现区左边距离

        Color bzlink
=Color.Black;//标准线颜色
    

        
int Chart_Flag=1;
        Bitmap bm ;

        
int Displacement =0//获取负坐标刻度数

      
    

        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string Text
        
{
            
get
            
{
                
return text;
            }


            
set
            
{
                text 
= value;
            }

        }

        
        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string DataStdName
        
{
            
get
            
{
                
return datastd;
            }


            
set
            
{
                datastd 
= value;
            }

        }


        [Bindable(
true),
        Category(
"Appearance"),
        DefaultValue(
"")]
        
public string DataName
        
{
            
get
            
{
                
return data;
            }


            
set
            
{
                data 
= value;
            }

        }


        
/// <summary>
        
/// 需要呈现的数据
        
/// </summary>

        public DataTable Items
        
{
            
set
            
{items=value;}
        }


        
/// <summary>
        
/// 需要显示的刻度量
        
/// </summary>

        public int Kdcount
        
{
            
set {kds=value;}
        }


        
/// <summary>
        
/// 刻度大小
        
/// </summary>


        
public float Kddw
        
{set{kddw=value;}}
        


        
public int ChatStyle
        
{set{this.Chart_Flag=value;}}


        
/// <summary> 
        
/// 将此控件呈现给指定的输出参数。
        
/// </summary>
        
/// <param text="output"> 要写出到的 HTML 代码 </param>

        protected override void Render(HtmlTextWriter output)
        
{
            
//if(dt==null)
            
//{
            
//    return "没有数据";
            
//}
            
//设计样式
            kd(items);
            output.Write(makeimage(items,
"c:/"));

            
        }


        
private string makeimage(DataTable dt,string imagefile)
        
{
            

            
string url="";
        
            
switch(Chart_Flag)
            
{
                
case 1:
                
{
                
                    
this.Draw_X_Y_Bar(dt);
                    url
=this.Drar_Bar(dt);

                    
break;
                }

                
case 2:
                
{

               
                    
this.Draw_X_Y (dt);
                    url
=this.Drow_Lin(dt);

                    
break;
                }

                
case 3:
                
{
                    
                    url
=this.Draw_Pie(dt);
                    
break;
                }


            }

                        
                
return  url;
            
            
        }

        
/// <summary>
        
/// 换算成实际值
        
/// </summary>
        
/// <param text="kd">提供的值</param>
        
/// <returns>返回换算后的实际值</returns>

        private float bl(float kd)
        
{
            
float bls=1;
            bls
=(float)height/((float)kds*(float)kddw);
            
return (float)kd*bls;
        }


     
        
#region //通过数据计算刻度,和负坐标数
        
        
private void  kd(DataTable dt)
        
{
            
float    mintest=float.MaxValue;
            
float    maxtest=float.MinValue;

              
float    maxnegative=0f;

            
            
for (int j=1;j<dt.Columns .Count ;j++)
            
{
                
for(int i=0;i<dt.Rows.Count;i++)
                
{
                    
float test=System.Convert.ToSingle(dt.Rows[i][j]);
                    
//求最小值
                    if(test<0  && test<maxnegative)
                    
{
                         maxnegative
=test;
                    }

                    
//求最大值
                    if(test>maxtest)
                    
{
                        maxtest
=test;
                    }

                }

            }


            maxtest
=maxtest+Math.Abs(maxnegative);

        
//    this.Page .Response .Write (maxtest);

                 kddw
=maxtest/kds;

              



            
double exp = Convert.ToDouble(Math.Floor(Math.Log10(maxtest)));

            
//    this.Page .Response .Write ("exp"+exp.ToString ()+"<br>");
            float tempMax = Convert.ToSingle(Math.Ceiling(maxtest / Math.Pow(10, exp)) * Math.Pow(10, exp));
    
            
// this.Page .Response .Write ("temp_Max"+exp.ToString ()+"<br>");

        
            kddw 
= tempMax / kds;
            
double expTick = Convert.ToDouble(Math.Floor(Math.Log10(kddw)));
            kddw 
= Convert.ToSingle(Math.Ceiling(kddw / Math.Pow(10, expTick)) * Math.Pow(10, expTick));
             
this.Displacement =Math.Abs ((int) Math.Floor(maxnegative/kddw));
        
//    this.Page .Response.Write (this.Displacement);

            
        }


        
#endregion




   
//
        #region  绘制折线图 

       
private string   Drow_Lin(DataTable dt)
         
{
             
       
           
//通过循环画出曲线图   
           int x=-1;
           
int bzy=-1;
        
            
           
           Graphics bp
=Graphics.FromImage(bm);
           
for (int j=1;j<dt.Columns.Count ;j++)
           
{
               
for(int i=0;i<dt.Rows.Count;i++)
               
{   
               
                   
//标准刻度

                 

                   
float bzkd=bl(System.Convert.ToSingle(dt.Rows[i].ItemArray[j]));
                   
//实际刻度
                   
//    float sjkd=bl(System.Convert.ToSingle(dt.Rows[i].ItemArray[2]));
                     
                   
int bztop=cxtop+height-(int)bzkd-3-  (int) (bl(this.Displacement*kddw));
                   
//填充标准柱(画刷,起点X,起点Y,宽,高)
                


                   bp.FillRectangle(
new SolidBrush(_color[j-1]),(i*40)+cxleft+20-3,bztop,6,6);
                   
//    int sstop=zmheight-(int)sjkd-(zmheight-cxtop-height)-3;
                   
//填充实时点(画刷,起点X,起点Y,宽,高)
                   
//    bp.FillRectangle(new SolidBrush(ss),(i*30)+cxleft,sstop,6,6);
                    
                   
//绘制点到点连接线
                   if(x!=-1)
                   
{
                       
//绘制标准点连接线
                   
                       bp.DrawLine(
new Pen( _color[j-1] ,1.6F),new Point(x,bzy),new Point((i*40)+cxleft+20,bztop));
                       
//绘制实时点连接线
                       
//    bp.DrawLine(new Pen(ss,1.6F),new Point(x+3,ssy+4),new Point((i*30)+cxleft+10,sstop+4));
                   }

                   x
=(i*40)+cxleft+20;
                   bzy
=bztop;
                   
//    ssy=sstop;
                 
//  bp.DrawString(dt.Rows[i].ItemArray[0].ToString (),new Font("宋体",9),new SolidBrush(Color.Black),new PointF((i*40)+cxleft+10,height+cxtop+1));
               
               
           }

   
               x
=-1;
             }

           FileStream fs
=new FileStream(Page.Server.MapPath(Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")),FileMode.Create);
           bm.Save(fs,ImageFormat.Jpeg);

           bm.Dispose();
           bp.Dispose();
           fs.Close();
         
return  "<img src="+Page.Request.Url.AbsolutePath.Replace(".aspx",".jpg")+" ></img>";

       }


        
#endregion




        
画住状图 


    
        
画 X,Y 轴 线和刻度
        
    
        
画 柱状 x,y  刻度
         
        
饼状图


}

}

 
内容概要:本文档是一份关于交换路由配置的学习笔记,系统地介绍了网络设备的远程管理、交换机与路由器的核心配置技术。内容涵盖Telnet、SSH、Console三种远程控制方式的配置方法;详细讲解了VLAN划分原理及Access、Trunk、Hybrid端口的工作机制,以及端口镜像、端口汇聚、端口隔离等交换技术;深入解析了STP、MSTP、RSTP生成树协议的作用与配置步骤;在路由部分,涵盖了IP地址配置、DHCP服务部署(接口池与全局池)、NAT转换(静态与动态)、静态路由、RIP与OSPF动态路由协议的配置,并介绍了策略路由和ACL访问控制列表的应用;最后简要说明了华为防火墙的安全区域划分与基本安全策略配置。; 适合人群:具备一定网络基础知识,从事网络工程、运维或相关技术岗位1-3年的技术人员,以及准备参加HCIA/CCNA等认证考试的学习者。; 使用场景及目标:①掌握企业网络中常见的交换与路由配置技能,提升实际操作能力;②理解VLAN、STP、OSPF、NAT、ACL等核心技术原理并能独立完成中小型网络搭建与调试;③通过命令示例熟悉华为设备CLI配置逻辑,为项目实施和故障排查提供参考。; 阅读建议:此笔记以实用配置为主,建议结合模拟器(如eNSP或Packet Tracer)动手实践每一条命令,对照拓扑理解数据流向,重点关注VLAN间通信、路由选择机制、安全策略控制等关键环节,并注意不同设备型号间的命令差异。
多旋翼无人机组合导航系统-多源信息融合算法(Matlab代码实现)内容概要:本文围绕多旋翼无人机组合导航系统,重点介绍了基于多源信息融合算法的设计与实现,利用Matlab进行代码开发。文中采用扩展卡尔曼滤波(EKF)作为核心融合算法,整合GPS、IMU(惯性测量单元)、里程计和电子罗盘等多种传感器数据,提升无人机在复杂环境下的定位精度与稳定性。特别是在GPS信号弱或丢失的情况下,通过IMU惯导数据辅助导航,实现连续可靠的位姿估计。同时,文档展示了完整的算法流程与Matlab仿真实现,涵盖传感器数据预处理、坐标系转换、滤波融合及结果可视化等关键环节,体现了较强的工程实践价值。; 适合人群:具备一定Matlab编程基础和信号处理知识,从事无人机导航、智能控制、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于多旋翼无人机的高精度组合导航系统设计;②用于教学与科研中理解多传感器融合原理与EKF算法实现;③支持复杂环境下无人机自主飞行与定位系统的开发与优化。; 阅读建议:建议结合Matlab代码与理论推导同步学习,重点关注EKF的状态预测与更新过程、多传感器数据的时间同步与坐标变换处理,并可通过修改噪声参数或引入更多传感器类型进行扩展实验。
源码来自:https://pan.quark.cn/s/28c3abaeb160 在高性能计算(High Performance Computing,简称HPC)范畴内,处理器的性能衡量对于改进系统构建及增强运算效能具有关键价值。 本研究聚焦于一种基于ARM架构的处理器展开性能评估,并就其性能与Intel Xeon等主流商业处理器进行对比研究,特别是在浮点运算能力、存储器带宽及延迟等维度。 研究选取了高性能计算中的典型任务,诸如Stencils计算方法等,分析了在ARM处理器上的移植编译过程,并借助特定的执行策略提升运算表现。 此外,文章还探讨了ARM处理器在“绿色计算”范畴的应用前景,以及面向下一代ARM服务器级SoC(System on Chip,简称SoC)的性能未来探索方向。 ARM处理器是一种基于精简指令集计算机(Reduced Instruction Set Computer,简称RISC)架构的微处理器,由英国ARM Holdings公司研发。 ARM处理器在移动设备、嵌入式系统及服务器级计算领域获得广泛应用,其设计优势体现为高能效比、低成本且易于扩展。 当前的ARMv8架构支持64位指令集,在高性能计算领域得到普遍采用。 在性能测试环节,重点考察了处理器的浮点运算能力,因为浮点运算在科学计算、形渲染和数据处理等高性能计算任务中扮演核心角色。 实验数据揭示,ARM处理器在双精度浮点运算方面的性能达到475 GFLOPS,相当于Intel Xeon E5-2680 v3处理器性能的66%。 尽管如此,其内存访问带宽高达105 GB/s,超越Intel Xeon处理器。 这一发现表明,在数据密集型应用场景下,ARM处理器能够展现出与主流处理器相匹敌的性能水平。 在实践...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值