基本信息
源码名称:C# 直角坐标系(绘图实例)
源码大小:0.08M
文件格式:.rar
开发语言:C#
更新时间:2018-04-20
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 3 元×
微信扫码支付:3 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
导入数据,实现在坐标系上绘画出折线图
导入数据,实现在坐标系上绘画出折线图
public partial class Form1 : Form { public Form1() { InitializeComponent(); } bool flag = false; ToolTip tooltip = new ToolTip(); int[] bufx = new int[1024]; int[] bufy = new int[1024]; string resultFile;//定义文本框的值 int readlen = 0;//定义输出点个数 //重载后方法! protected override void OnPaint(PaintEventArgs e) { //标志为flase时,不画线 if (flag == false) return; Graphics g = e.Graphics; g.DrawLine(Pens.Black, 10, 10, 100, 100); } //全局定义 int width = 800, height = 350; //定义画布大小 System.Drawing.Bitmap image = new System.Drawing.Bitmap(950, 500); //创建位图(Draw 绘制) //创建坐标系 private void draw(int[] xbuf, int[] ybuf)//创建坐标系方法(xbuf,ybuf绘制点坐标数组) { //创建Graphics类对象(Graphics 绘图)(Graphics在已知的控件上的方法) Graphics g = Graphics.FromImage(image); //定义填充图图形 System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.Blue, 1.2f, true); Brush brush1 = new SolidBrush(Color.Blue); Brush brush2 = new SolidBrush(Color.SaddleBrown); //定义画笔 System.Drawing.Pen mypen = new Pen(brush, 1); System.Drawing.Pen mypen2 = new Pen(Color.Green, 2); System.Drawing.Pen mypen3 = new Pen(Color.Green, 1); Pen mypen4 = new Pen(Color.Green, 2); //定义字体 Font font = new System.Drawing.Font("Arial", 9, FontStyle.Regular); Font font1 = new System.Drawing.Font("宋体", 20, FontStyle.Regular); Font font2 = new System.Drawing.Font("Arial", 8, FontStyle.Regular); //清空图片背景色 g.Clear(Color.White); //创建点 PointF center_Pt = new PointF(475, 225);//定义原点(中心点) float Xaxis_length = 405.0F; float Yaxis_length = 205.0F; PointF Xaxis_Begin = new PointF(center_Pt.X - Xaxis_length, center_Pt.Y);//X轴首端点 PointF Xaxis_EndPt = new PointF(center_Pt.X Xaxis_length, center_Pt.Y);//X轴末端点 PointF Yaxis_Begin = new PointF(center_Pt.X, center_Pt.Y Yaxis_length);//Y轴首端点 PointF Yaxis_EndPt = new PointF(center_Pt.X, center_Pt.Y - Yaxis_length);//Y轴末端点 //①绘制由坐标对、宽度和高度指定的矩形( x, y, width, height)(绘制边框线) g.DrawRectangle(new Pen(Color.Black), Xaxis_Begin.X, Yaxis_EndPt.Y, 810, 410); //② 画X轴 画Y轴 (复杂方法) // g.DrawLine(Pens.Black, Xaxis_Begin.X, Xaxis_Begin.Y, Xaxis_EndPt.X, Xaxis_EndPt.Y);//X轴首 末=左右 // g.DrawLine(Pens.Black, Yaxis_Begin.X, Yaxis_Begin.Y, Yaxis_EndPt.X, Yaxis_EndPt.Y);//Y轴首 末=上下 //画Y轴三角形箭头和单位 PointF[] yPt = new PointF[3] { new PointF(Xaxis_Begin.X, Yaxis_EndPt.Y - 20), new PointF(Xaxis_Begin.X - 8, Yaxis_EndPt.Y), new PointF(Xaxis_Begin.X 8, Yaxis_EndPt.Y) };//定位一个三角形有序对数组(位置) g.DrawPolygon(Pens.Black, yPt);//画三角形箭头 g.FillPolygon(new SolidBrush(Color.Black), yPt);//填充成实心 g.DrawString("Elec(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_Begin.X - 70, Yaxis_EndPt.Y));//单位 //画X轴三角形箭头和单位 PointF[] xPt = new PointF[3] { new PointF(Xaxis_EndPt.X 20, Yaxis_Begin.Y), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y - 8), new PointF(Xaxis_EndPt.X, Yaxis_Begin.Y 8) };//定位一个三角形有序对数组(位置) g.DrawPolygon(Pens.Black, xPt);//画三角形箭头 g.FillPolygon(new SolidBrush(Color.Black), xPt); //填充成实心 g.DrawString("Angle(°)", new Font("宋体", 12), Brushes.Black, new PointF(Xaxis_EndPt.X - 15, Yaxis_Begin.Y 20));//单位 //添加背景颜色 g.FillRectangle(Brushes.Lavender, Xaxis_Begin.X 1, Yaxis_EndPt.Y 1, width 9, height 59); //绘制线条 //绘制纵向线条 //x和y(430)为首个竖向线条的位置,13为竖向线条总数,60为竖向间隔 float x = 140; for (int i = 0; i < 11; i ) { g.DrawLine(mypen, x, Yaxis_Begin.Y, x, Yaxis_EndPt.Y); x = x 67; } //绘制横向线条 //y和x(820)为首个横向线条的位置,7为横向线条总数,45为横向间隔 float y = 75; for (int i = 0; i < 7; i ) { g.DrawLine(mypen, Xaxis_Begin.X, y, Xaxis_EndPt.X, y); y = y 51; } //绘制一条虚线(标准线) mypen4.DashStyle = System.Drawing.Drawing2D.DashStyle.DashDot; g.DrawLine(mypen4, new Point(70, 35), new Point(882, 35)); //刻度 //x轴上对应的标记 String[] n = { " -180", " -150", " -120", " -90", " -60", " -30", " 0", " 30", " 60", " 90", "120", "150", "180" }; //设置文字内容及输出位置(DrawString 在指定位置输出文本) //x和y(435)为首个刻度的位置,13为刻度总数,60为刻度间隔 x = 50.0F; for (int i = 0; i < 13; i ) { g.DrawString(n[i].ToString(), font, Brushes.Red, x, 435); x = x 68.5F; } //y轴上对应的标记 String[] m = { " 0", " -10", " -20", " -30", " -40", " -50", " -60", " -70", " -80" }; //设置文字内容及输出位置(DrawString 在指定位置输出文本) //x(70)和y为首个刻度的位置,13为刻度总数,60为刻度间隔 y =12.5F; for (int i = 0; i < 9; i ) { g.DrawString(m[i].ToString(), font, Brushes.Red, 40, y); y = y 51.4F; } g.Dispose(); this.pictureBox1.Image = image; } //图片框 private void pictureBox1_Click(object sender, EventArgs e) { } //Form1 private void Form1_Paint(object sender, PaintEventArgs e) { draw(bufx, bufy); } //选取文件按钮 private void button1_Click(object sender, EventArgs e) { //第一种:folderBrowserDialog1为选取文件夹控件 //if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) //{ // textBox1.Text = folderBrowserDialog1.SelectedPath; //} //第二种:openFileDialog1为选取文件控件 openFileDialog1.InitialDirectory = "c:\\";//注意这里写路径时要用c:\\而不是c:\ openFileDialog1.Filter = "文本文件|*.txt";//筛选文件类型 openFileDialog1.RestoreDirectory = true; //控制对话框在关闭之前是否恢复当前目录 openFileDialog1.FilterIndex = 1; //在对话框中选择的文件筛选器的索引,如果选第一项就设为1 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) { System.IO.StreamReader sr = new System.IO.StreamReader(openFileDialog1.FileName); //MessageBox.Show(sr.ReadToEnd()); //显示选取的文本文件内容 //在文本框显示文件路径 resultFile = openFileDialog1.FileName; textBox1.Text = resultFile;// sr.Close(); } } //进行绘图按钮 private void button2_Click(object sender, EventArgs e) { Graphics gph = Graphics.FromImage(image); //定义折线图原点 gph.TranslateTransform(474, 30); Pen pn = new Pen(Color.Red, 1); readlen = 0; if (resultFile == null) { //报错弹出框 MessageBox.Show("请选取要绘图的文件!", "错误", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); return; } else { //文件不为空的时候读取文件 StreamReader read = new StreamReader(File.Open(textBox1.Text, FileMode.Open), System.Text.Encoding.Default); List<float> x = new List<float>(); List<float> y = new List<float>(); while (true) { string strLine = read.ReadLine(); if (strLine == null || strLine == "") { break; } else { string[] sl = strLine.Split(new char[] { '\t' }); if (sl[0] != "!") { x.Add(2.25F * float.Parse(sl[0])); y.Add(-4.9F * float.Parse(sl[1])); } } if (strLine.Length >= 3) { String[] date = strLine.Split(','); int len = date.Length; //label2.Text =Convert.ToString(date[11]); int j = 0; for (int p = 0; p < len / 2; p ) { //x:70 ,4* x=70 4*d; //y:310,*6 y=310-6*d bufx[readlen / 2 p] = Convert.ToInt32(date[j]) * 4 40; bufy[readlen / 2 p] = 310 - Convert.ToInt32(date[j 1]) * 6; j = 2; } readlen = len; } } //关闭数据流 read.Close(); int i = 5; while (true) { if (i >= x.Count - 1) { break; } else { gph.DrawLine(Pens.Red, x[i], y[i], x[i 1], y[i 1]); i ; } } //输出点数 gph.Dispose(); label2.Text = Convert.ToString("输出点个数:" readlen); this.pictureBox1.Image = image; } } //清除数据按钮 private void button3_Click(object sender, EventArgs e) { draw(bufx, bufy); label2.Text = Convert.ToString("输出点个数:"); } //文本框 private void textBox1_TextChanged(object sender, EventArgs e) { }