生成曲线

原创 2007年10月01日 13:33:00
imginfo.jpg
这里是从Dataset里的数据生成曲线图.
我的Dataset是从表Sendrec里读取的数据,分别有Id,Sendid(订单号),Sendtime(记录时间),Sendnum(单位时间发送量/我这里是五分钟)几个字段

过程如下:
public void draw(Page page,DataSet ds,int Tnum){}
其中page是用来传递引用这个过程的页面,这样让页面是JPG方式直接向客户端输出生成的曲线图.
ds就是取出来的数据集了
Tnum只是我这里要用到的一个参数,不想让这个类去接触读取过程,所以把订单的总量直接取出后传递给它的.
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;

using System.Web.UI.HtmlControls;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing;
using System.IO;


public class imgdraw
{
    
public imgdraw()
    
{
        
    }

    
public void draw(Page page,DataSet ds,int Tnum)
    
{
        
//取得记录数量
        int count = ds.Tables[0].Rows.Count;
        
//记算图表宽度
        int wd = 80 + 20 * (count - 1);
        
//设置最小宽度为800
        if (wd < 800) wd = 800;
        
//生成Bitmap对像
        Bitmap img=new Bitmap(wd,400);
        
//生成绘图对像
        Graphics g = Graphics.FromImage(img);
        
//定义黑色画笔
        Pen Bp = new Pen(Color.Black);
        
//定义红色画笔
        Pen Rp = new Pen(Color.Red);
        
//定义银灰色画笔
        Pen Sp = new Pen(Color.Silver);
        
//定义大标题字体
        Font Bfont = new Font("Arial"12, FontStyle.Bold);
        
//定义一般字体
        Font font = new Font("Arial"6);
        
//定义大点的字体
        Font Tfont = new Font("Arial"9);
        
//绘制底色
        g.DrawRectangle(new Pen(Color.White, 400), 00, img.Width, img.Height);
        
//定义黑色过渡型笔刷
        LinearGradientBrush brush = new LinearGradientBrush(new Rectangle(00, img.Width, img.Height), Color.Black, Color.Black, 1.2Ftrue);
        
//定义蓝色过渡型笔刷
        LinearGradientBrush Bluebrush = new LinearGradientBrush(new Rectangle(00, img.Width, img.Height), Color.Blue, Color.Blue, 1.2Ftrue);
        
//绘制大标题
        g.DrawString(ds.Tables[0].Rows[0]["sendid"].ToString() + "号订单发送情况曲线图", Bfont, brush, 405);
        
//取得当前发送量
        int nums=0;
        
for (int i = 0; i < count; i++)
        
{
            nums
+=Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]);
        }

        
//绘制信息简报
        string info="订单发送时间:"+ds.Tables[0].Rows[0]["sendtime"].ToString()+"  曲线图生成时间:"+DateTime.Now.ToString()+"  订单总量:"+Tnum.ToString()+"  当前发送总量:"+nums.ToString();
        g.DrawString(info, Tfont, Bluebrush, 
4025);
        
//绘制图片边框
        g.DrawRectangle(Bp, 00, img.Width - 1, img.Height - 1);

        
//绘制竖坐标线       
        for (int i = 0; i < count; i++)
        
{
            g.DrawLine(Sp, 
40+20 * i, 6040+20 * i, 360);
        }

        
//绘制时间轴坐标标签
        for (int i = 0; i < count; i+=2)
        
{
            
string st = Convert.ToDateTime(ds.Tables[0].Rows[i]["sendtime"]).ToString("hh:mm");
            g.DrawString(st, font, brush, 
30 + 20 * i, 370);
        }

        
//绘制横坐标线
        for (int i = 0; i < 10; i++)
        
{
            g.DrawLine(Sp, 
4060+30*i, 40+20*(count-1), 60+30*i);
            
int s = 2500 - 50 * i * 5;
            
//绘制发送量轴坐标标签
            g.DrawString(s.ToString(), font, brush, 1060 + 30 * i);
        }

        
        
//绘制竖坐标轴
        g.DrawLine(Bp, 405540360);
        
//绘制横坐标轴
        g.DrawLine(Bp, 4036045 + 20 * (count - 1), 360);

        
//定义曲线转折点
        Point[] p = new Point[count];
        
for (int i = 0; i < count; i++)
        
{
            p[i].X 
= 40 + 20 * i;
            p[i].Y 
= 360- Convert.ToInt32(ds.Tables[0].Rows[i]["sendnum"]) / 5*3/5;
        }

        
//绘制发送曲线
        g.DrawLines(Rp, p);

        
for (int i = 0; i < count; i++)
        
{
            
//绘制发送记录点的发送量
            g.DrawString(ds.Tables[0].Rows[i]["sendnum"].ToString(), font, Bluebrush, p[i].X, p[i].Y - 10);
            
//绘制发送记录点
            g.DrawRectangle(Rp, p[i].X - 1, p[i].Y - 122);
        }

        
//绘制竖坐标标题
        g.DrawString("发送量", Tfont, brush, 540);
        
//绘制横坐标标题
        g.DrawString("发送时间", Tfont, brush, 40385);


        
//保存绘制的图片
        MemoryStream stream = new MemoryStream();
        img.Save(stream, ImageFormat.Jpeg);
        
//图片输出
        page.Response.Clear();
        page.Response.ContentType 
= "image/jpeg";
        page.Response.BinaryWrite(stream.ToArray());

    }

}

 

实验6 Bezier曲线生成

1.实验目的: 了解曲线的生成原理,掌握几种常见的曲线生成算法,利用VC+OpenGL实现Bezier曲线生成算法。 2.实验内容: (1) 结合示范代码了解曲线生成原理与算法实现,尤其是Bez...
  • wpxu08
  • wpxu08
  • 2017年04月17日 10:33
  • 387

OpenGL实现的Bezier曲线

贝塞尔曲线的是参数曲线,参数在0-1之间,它的计算方法是控制点和伯因斯坦基函数的乘积的求和。 下面是对贝塞尔曲线的实现。   #include #include #define DIMENS...
  • smells2
  • smells2
  • 2011年12月16日 21:42
  • 2945

gamma曲线函数

函数表达式:          下面我们分析参数的意义。从几何特点可以看出,较大的对应的曲线开始时增加更快。 这一模型也可从微分方程角度来描述。b值越大,其斜率越大,求导函数得到斜率 ...
  • digent
  • digent
  • 2016年01月08日 18:29
  • 1055

OpenGL入门2——曲线生成算法

一、DDA算法       数字微分分析仪()
  • xiaoxiaoyusheng2012
  • xiaoxiaoyusheng2012
  • 2014年11月02日 20:53
  • 2850

linux性能曲线工具

linux下有很多监控工具,如top,free,vmstat等。有一大痛点就是各种工具生成的结果格式不一致,较长一段时间内监控数据量大,人工阅读非常困难。所以写了一个脚本,把各种监控参数输出为一个表格...
  • shenyuflying
  • shenyuflying
  • 2016年11月20日 21:44
  • 422

OpenGL绘制Bezier曲线

 项目要求: – 使用鼠标在屏幕中任意设置控制点,并生成曲线 – 使用鼠标和键盘的交互操作实现对曲线的修改。 项目总体介绍 本项目利用Bezier曲线生成算法生成可由...
  • zjccoder
  • zjccoder
  • 2015年01月17日 18:57
  • 4841

java 提取曲线图数值并导出excel

由于公路隧道通风辅助设计及网络分析系统中需要经常添加风机曲线,用Autocad取点或者Origin中的取点都不是很方便,所以采用Jpanel绘图取点的方式。 先上图: 点图取点及绘制点的部...
  • tianyatest
  • tianyatest
  • 2016年07月27日 18:37
  • 1076

vtk曲线

http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/ParametricSpline http://www.paraview.org/Wiki...
  • superkeep
  • superkeep
  • 2017年03月24日 09:27
  • 178

步进电机S曲线的生成

步进电机的速度从0变为一个比较大的速度,需要一个加速过程,否则会产生振动或是电机的堵转。电机加速通常有T型曲线和S型曲线两种方式。S型曲线相对于T型曲线,S型曲线的速度不会突变。S型曲线的原始公式如下...
  • a906168402
  • a906168402
  • 2017年04月24日 16:02
  • 3071

Maya: 菜单 编辑曲线 >修改曲线

编辑NURBS曲线 >修改曲线 用于对曲线的形状进行修正,但不改变曲线点的数量。...
  • u011275873
  • u011275873
  • 2013年08月05日 20:16
  • 338
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生成曲线
举报原因:
原因补充:

(最多只允许输入30个字)