GDI+画实时曲线的问题

lcz7015 2014-01-11 01:17:14

int tem=0;
int bmqmcs = 0;
private void timer1_Tick(object sender, EventArgs e)
{

SadInputCount();//采集编码器脉冲
bmqmcs = SadInputCount(); //实时采集编码器脉冲数
tem++;
Point[]Point = new Point[40000];//定义数组
Point[tem].X = tem;
Point[tem].Y = Convert.ToInt16(bmqmcs);//用编码器脉冲数做Y坐标
Graphics qs = pictureBox1.CreateGraphics();
qs.DrawLines(new Pen(Color.Red,1),Point);//画实时曲线

}
现在能采集到编码器脉冲,想画时间脉冲实时曲线。用脉冲当Y坐标,tem相当时间做X坐标。为什么画线都是从原点开始,不是连续的呢?数组定义的不对吗?还有point[]X和point[]Y必须是整数吗?高手指教
...全文
197 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhoujk 2014-01-12
  • 打赏
  • 举报
回复
线段的端点B 是正确的,但端点A 的值为0,才会是这个效果,你中断查一下线段的数据吧,找到问题后,具体的赋值很简单
hxhbluestar 2014-01-11
  • 打赏
  • 举报
回复
效果图:
hxhbluestar 2014-01-11
  • 打赏
  • 举报
回复
不需要高手,楼主问的都是很基础的问题,你对基本的变量作用域和初始化都还没有理解,需要把基础好好补补了,按照你的写法, Point[]Point = new Point[40000];放在timer触发事件里面,在不停的分配新内存,不停的从第0个位置写入一个新的位置,所以你每次画的都是从(0,0)到你新生成的这个点。而且这里也没有必要使用DrawLines方法不停的从头画一遍,使用DrawLine方法累计往下画就行。

废话不多说,看代码


public partial class Form1 : Form {
public Form1() {
InitializeComponent();
g = this.panel_Canvas.CreateGraphics();//放构造函数或者btn_Start_Click里面都可以
}

int x, y;
Graphics g = null;
List<Point> pList = new List<Point>();//数组有界,这里更应该使用List

private void timer_Draw_Tick(object sender, EventArgs e) {
Random r = new Random();
x = r.Next(0, panel_Canvas.Width);
y = r.Next(1, panel_Canvas.Height);
pList.Add(new Point(x, y));
Pen redPen = new Pen(Brushes.Red);
if (pList.Count > 1) {
//这一句你应该能理解是什么意思
g.DrawLine(redPen, pList[pList.Count - 2], pList[pList.Count -1]);

}
}

private void btn_Start_Click(object sender, EventArgs e) {
timer_Draw.Enabled = true;
}
}


lcz7015 2014-01-11
  • 打赏
  • 举报
回复
人都去哪了,没高手了吗
lcz7015 2014-01-11
  • 打赏
  • 举报
回复
高手指教啊 Graphics qs = pictureBox1.CreateGraphics(); 无法放到外面
lcz7015 2014-01-11
  • 打赏
  • 举报
回复

把数组定义为全局变量后,每次变化的X.Y点能连接起来了。可是还是会画个0.0到XY的值线。timer1_Tick中tem++每次都是增加的,怎么会出来个0.0。
Mic_Gary 2014-01-11
  • 打赏
  • 举报
回复
Graphics qs = pictureBox1.CreateGraphics(); 或者 Point[]Point = new Point[40000];//定义数组 放在外面试试看
Mic_Gary 2014-01-11
  • 打赏
  • 举报
回复
很简单呀,虽然不知道你做的是什么,但是问题原因能猜个八九不离十的,你每次timer1_Tick事件中都重新new 一个point,每次都是0,0开始了,你把它设置为全局变量就ok了
ArmStronger 2014-01-11
  • 打赏
  • 举报
回复
你的数组放在timer里面定义肯定不对了,每次都定义新的数组,只赋了一个值,其他都是(0,0),放到外面去就可以了
小猪八Q 2014-01-11
  • 打赏
  • 举报
回复
只能是int的值 至于从原点开始,是因为屏幕的左上角是(0,0)点
lcz7015 2014-01-11
  • 打赏
  • 举报
回复
高手不在吗?自己顶

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧