基本信息
源码名称:C# 直角坐标系(绘图实例)
源码大小:0.08M
文件格式:.rar
开发语言:C#
更新时间:2018-04-20
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):78630559
本次赞助数额为: 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)
{
}