简单的数据曲线VC代码.doc

上传人:re****.1 文档编号:563839222 上传时间:2023-04-24 格式:DOC 页数:12 大小:36.50KB
返回 下载 相关 举报
简单的数据曲线VC代码.doc_第1页
第1页 / 共12页
简单的数据曲线VC代码.doc_第2页
第2页 / 共12页
简单的数据曲线VC代码.doc_第3页
第3页 / 共12页
简单的数据曲线VC代码.doc_第4页
第4页 / 共12页
简单的数据曲线VC代码.doc_第5页
第5页 / 共12页
点击查看更多>>
资源描述

《简单的数据曲线VC代码.doc》由会员分享,可在线阅读,更多相关《简单的数据曲线VC代码.doc(12页珍藏版)》请在金锄头文库上搜索。

1、简单的数据曲线VC代码在科学计算中经常需要将采样数据用曲线作出来。如果将作图这部分工作用通用代码完成,可以解决很大的编程负担。为此,在下写了这个类,供大家使用。如果有好的建议,请不吝指教。为了简洁,没有加入异常处理代码。功能:输入数据x0N-1,给出作图参数,绘出曲线。i.e.CDC* pdc=GetDC();table tbl;tbl.SetDC(pdc);tbl.SetRect(CRect(100,100,700,500);/作图范围tbl.SetXRange(-0.5,0.5);/第一个数据的x坐标是-0.5,最后一个数据的坐标是0.5tbl.SetXNote(fs);tbl.SetYN

2、ote(db);tbl.SetDat(x,N-1);/传入数据tbl.SetTitle(your title);/设置标题tbl.prepare();/计算参数tbl.draw();/作图下面是代码:/table.hclass tableprivate:CDC* m_pdc;CRect m_rect;/作图范围CRect m_margin;/边距。防止标注跑出作图范围,要留有裕量double* m_dat;/数据int m_N;/数据长度/作图参数CPoint m_o;/坐标原点double m_oxvalue;/原点处x轴值double m_oyvalue;/原点处y轴值double m_y

3、max;double m_ymin;double m_xmax;double m_xmin;/y,x的最大值和最小值double m_yunit;double m_xunit;/y,x的刻度单位intm_yp;int m_yn;int m_xp;int m_xn;/y,x在正、负半轴的格数int m_ylen;int m_xlen;/y,x每格长度(像素)CString m_title;/图表名称CString m_ynote;/y轴标记CString m_xnote;/x轴标记public:void prepare();table(CDC* pdc,CRect rect,double* da

4、t,int N,double t1,double t2);table();table();/*设置标题,坐标说明*/void SetTitle(CString title);void SetXNote(CString xnote);void SetYNote(CString ynote);void SetDC(CDC* pdc)m_pdc=pdc;void SetRect(CRect rc)m_rect=rc;void SetDat(double* dat,int N)m_dat=dat;m_N=N;void SetXRange(double t1,double t2)m_xmin=t1;m_

5、xmax=t2;void draw();/table.cpp#include stdafx.h#include #include table.htable:table(CDC* pdc,CRect rect,double* dat,int N,double t1,double t2)m_pdc=pdc;m_rect=rect;m_N=N;m_dat=dat;m_xmax=t2;m_xmin=t1;m_margin=CRect(20,20,10,20);m_xnote=x;m_ynote=y;m_title=未命名曲线;table:table()m_pdc=0;m_dat=0;m_N=0;m_m

6、argin=CRect(20,20,10,20);m_xnote=x;m_ynote=y;m_title=未命名曲线;table:table()void table:draw()if(!m_pdc | !m_dat | (m_N=0) return;int i;CString str;CDC memdc;memdc.CreateCompatibleDC(m_pdc);CBitmap bmp,*pOldBmp;bmp.CreateCompatibleBitmap(m_pdc,m_rect.Width(),m_rect.Height();pOldBmp=memdc.SelectObject(&bm

7、p);CRect bmprect(0,0,m_rect.Width(),m_rect.Height();CPoint bmpo(m_o.x-m_rect.left,m_o.y-m_rect.top);memdc.Rectangle(bmprect);/标题memdc.SetTextColor(RGB(200,150,100);memdc.SetTextAlign(TA_CENTER|TA_TOP);memdc.TextOut(bmprect.left+bmprect.right)/2,bmprect.top,m_title);/坐标轴memdc.SetTextColor(RGB(150,150

8、,0);memdc.SetTextAlign(TA_RIGHT|TA_BOTTOM);double t=m_xunit;int e=0;while(t=10.0)t/=10.0;e+;str.Format(%.0fe%d,t,e);str+=m_xnote;memdc.TextOut(bmprect.right,bmpo.y,str);memdc.SetTextColor(RGB(0,0,0);memdc.SetTextAlign(TA_LEFT|TA_TOP);for(i=-m_xn;i=m_xp;i+)str.Format(%d,i);memdc.TextOut(bmpo.x+m_xlen

9、*i,bmpo.y,str);memdc.MoveTo(bmpo.x+m_xlen*i,bmpo.y);memdc.LineTo(bmpo.x+m_xlen*i,bmpo.y-10);memdc.MoveTo(bmprect.left,bmpo.y);memdc.LineTo(bmprect.right,bmpo.y);/-y轴-memdc.SetTextColor(RGB(150,150,0);memdc.SetTextAlign(TA_LEFT|TA_TOP);t=m_yunit;e=0;while(t=10.0)t/=10.0;e+;str.Format(%.0fe%d,t,e);str

10、+=m_ynote;memdc.TextOut(bmpo.x,bmprect.top,str);memdc.SetTextColor(RGB(0,0,0);memdc.SetTextAlign(TA_RIGHT|TA_BOTTOM);for(i=-m_yn;i=m_yp;i+)str.Format(%d,i);memdc.TextOut(bmpo.x,bmpo.y-m_ylen*i,str);memdc.MoveTo(bmpo.x,bmpo.y-m_ylen*i);memdc.LineTo(bmpo.x+10,bmpo.y-m_ylen*i);memdc.MoveTo(bmpo.x,bmpre

11、ct.bottom);memdc.LineTo(bmpo.x,bmprect.top);/作曲线CPen jPen,*pOldPen;jPen.CreatePen(PS_SOLID,1,RGB(255,0,0);pOldPen=memdc.SelectObject(&jPen);memdc.MoveTo(bmpo.x+m_xlen*(m_xmin-m_oxvalue)/m_xunit,bmpo.y-m_ylen*(m_dat0-m_oyvalue)/m_yunit);double interval=(m_xmax-m_xmin)/(m_N-1);for(i=1;iBitBlt(m_rect.l

12、eft,m_rect.top,m_rect.Width(),m_rect.Height(),&memdc,0,0,SRCCOPY);memdc.SelectObject(pOldBmp);void table:prepare()int i;RECT margin;margin.left=m_margin.left;margin.top=m_margin.top;margin.right=m_margin.right;margin.bottom=m_margin.bottom;CRect rc=m_rect-&margin;/准备y轴参数/y的max,minm_ymax=m_ymin=m_dat0;for(i=1;im_ymax)m_ymax=m_dati;else if(m_datim_ymin)m_ymin=m_dati;/y的刻度单位double L=m_ymax-m_ymin;if(L=0) L=m_ymax;/attentionif(L=0) L=1;double scale=1.0;while(L=50.0)scal

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号