第四篇应用绘图编程(c语言程序)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(二)绘制三维直方图
Part 3 vc++图形程序设计
Part 3 vc++图形程序设计
CPoint v[4]; //动态定义侧面(或顶面)平行四边形 时用来存储顶点坐标
CPen pen(PS_SOLID,2,RGB(0,0,0)),*p_pen; //画平行四边形用的画笔
画条图的顶面平行四边形 v[0].x=x+dx; v[0].y=y1-a[i]; v[1].x=v[0].x+h; v[1].y=v[0].y-h; v[2].x=v[1].x-dx; v[2].y=v[1].y; v[3].x=v[2].x-h; v[3].y=v[2].y+h; pDC->Polygon(v,4);
(三)带坐标轴和数据标注的直方图
Part 3 vc++图形程序设计
const int N=12,dx=(x1-x0)/N,h=dx/4; //数据的个数及条图的宽度以及侧面的宽度
const int M=10,dy=30; //等高线的间隔数及间隔宽度
CString s; // 用于格式化数据显示
#define R rand()%56+200 // 所用的辉度值≥200,不至于太暗
Part 3 vc++图形程序设计
画y 轴及标注线
pDC->MoveTo(x0,y0); pDC->LineTo(x0,0); pDC->MoveTo(x0,0); pDC->LineTo(x0-3,12); pDC->MoveTo(x0,0); pDC->LineTo(x0+3,12);
Part 3 vc++图形程序设计
一、直方图
(一)简单直方图
Part 3 vc++图形程序设计
Part 3 vc++图形程序设计
1、建立单文档工程
系统自动生成一个视图类…View
2、在OnDraw( )函数中添加代码
const int x0=20,y0=10,x1=500,y1=370; //定义视口的顶点在窗口中的坐标
const int N=12,dx=(x1-x0)/N; //数据的个百度文库及条图的宽度
pDC->TextOut(x0+i*dx+(dx-s.GetLength()*8)/2 ,y1+4,s);
//沿X轴标记数值 }
Part 3 vc++图形程序设计
(四)从文件中获取数据的直方图
【文件中的数据格式】 6,50,100,150,50,100,150 6:数据个数
1、建立单文档工程 2、添加消息响应函数
WM_LBUTTONDOWN: OnLButtonDown()
Part 3 vc++图形程序设计
OnLButtonDown( )代码
CFileDialog ofn (TRUE, NULL,"*.txt", OFN_FILEMUSTEXIST|OFN_PATHMUSTEXIST, "Text files (*.txt)\0*.txt\0");
int a[N]={172,33,81,266,158,338,237,67,205,76,116,219}; //演示数据
Part 3 vc++图形程序设计
CBrush br; int i, x; srand((unsigned)time(NULL));
//随机数序列初始化 pDC->Rectangle(x0,y0,x1,y1);
s.Format("%3d",dy*i); pDC->TextOut(10,y-8,s); }
TextOut(10,y-8,s)
参数1、2 文本的起点坐标
参数3
文本的内容
Part 3 vc++图形程序设计
for(i=0;i<N;++i) {
s.Format("%d",a[i]); //将数据格式化为字符串形式
Part 3 vc++图形程序设计
画条图的侧面平行四边形 v[2].x=v[1].x; v[2].y=v[1].y+a[i]; v[3].x=x+dx; v[3].y=y1;
pDC->Polygon(v,4); //多边形绘制,V为CPoint类的数组。
注意有两个顶点与顶面的相同,不必重新计算
Part 3 vc++图形程序设计
(final pixel = pen OR screen pixel).
Part 3 vc++图形程序设计
for(y=y1,i=0;y>=y0;++i,y-=dy) { if(y!=y0&&y!=y1)
{ pDC->MoveTo(x0,y); pDC->LineTo(x1+h,y); } //画水平等高线
//用画一个白色矩形的方法达到清屏的目的。
Part 3 vc++图形程序设计
for(i=0,x=x0;i<N;++i,x+=dx) {
br.CreateHatchBrush(rand()%6, RGB(rand()%200,rand()%200, rand()%200));
//每个条图采用随机的网纹样式和颜色 pDC->SelectObject(&br); pDC->Rectangle(x,y1-a[i],x+dx,y1); //画条图 pDC->SelectStockObject(WHITE_BRUSH); br.DeleteObject(); }
BYTE r,g,b; //An 8-bit integer that is not signed.
Part 3 vc++图形程序设计
画x 轴
pDC->MoveTo(x0,y1); pDC->LineTo(x=x1+2*dx,y1); pDC->MoveTo(x,y1); pDC->LineTo(x-12,y1-3); pDC->MoveTo(x,y1); pDC->LineTo(x-12,y1+3);
pen.CreatePen(PS_DOT,1,RGB(100,100,100)); //水平等高线采用点虚线
p_pen=pDC->SelectObject(&pen); //为画水平等高线作准备
pDC->SetROP2(R2_MASKPEN); //水平等高线用与运算方式画,以免覆盖图形
R2_MERGEPEN Pixel is a combination of the pen color and the screen color