VC6.0中画曲线的函数

合集下载

polyline的使用方法

polyline的使用方法

polyline的使用方法
搞自动化会经常遇到一个问题就是记录实时的曲线,通常做法是首先将数据保存在一个记事本中,或数据库。

使用VB或DELPHI可以直接调用现成的控件画图,只是控制起来不方便。

所以使用VC就需要程序来控制。

在网上搜了好多就是没有一个完整的例子。

下面就是使用VC6.0实现画任意曲线的方法之一。

void CLineView::OnLine()
{
// TODO: Add your command handler code here
POINT pts[5];
long a[5]={20,50,60,10,180};
long b[5]={10,20,30,40,50};
for(int i=0;i<5;i++)
{
pts[i].x=b[i];
pts[i].y=a[i];
}
//selectobject(hDC,InVisiblepen);
//const POINT* ppts=pts;
HDC hdc;
hdc=::GetDC(m_hWnd);
::Polyline(hdc,pts,5);
::ReleaseDC(m_hWnd,hdc);
}
首先做一个消息响应函数,在此基础上编写上述代码就可以实现画线功能。

可以把记事本的数据放入a中,令b为时间即可。

VC中使用TeeChart绘制实时曲线

VC中使用TeeChart绘制实时曲线

VC中使用TeeChart绘制实时曲线上网找了一个teechart8的Activex版本,在VC6下使用正常,感觉功能挺强大的,于是决定认真用一用,我是完全完全的新手,请高手们直接忽略我,或者给我提些好的建议。

我得到的是一个teechart8.ocx文件,这是Activex的文件,使用之前先注册一下,将该文件放入系统目录下,然后打开命令提示符,或者直接在运行窗口输入:regsvr32 T eeChart8.ocx,然后会有一个注册成功的提示框,说明我们的ActiveX控件注册成功,在VC6下就可以使用了。

如果不想使用了,可以使用regsvr32 -u TeeChart8.ocx 解除对teechart8的注册。

我的第一个任务是熟悉teechart控件。

首先新建一个基于MFC的exe工程,选择对话框,其他默认。

进入工程以后可以看到类视图中只有系统生成的默认的几个类,我先在类视图中在工程名上点右键新建两个文件夹,一个叫src,一个叫tee,然后把默认生成的几个类(dlg,app,about三个类)拖放到src文件夹中。

做这一步实际上没有什么实质的意义,只是为了看起开比较方便,因为一会儿添加了teechart8以后会有很多的类添加进来,看起来非常困难,所以先提前把他们分开。

闲话不多说,进入资源视图,点击主对话框后,删除todo那个静态文本。

下一步我们要在这个对话框上放置一个teechart图表,但是工具栏中没有,所以需要先添加一下。

依次点击工程-》增加到工程-》components and controls,进入对话框后选择register ed ActiveX controls,找到TeeChart Pro Activex control v8后点击insert,会弹出添加类的对话框,左边的列表里面是可以选择添加的类,现在我还不太了解具体类的作用,所以只好一并添加了,点击确定以后回到资源视图会发现工具栏下面多累一个圆形的小图标,这就是我们的teechart8控件了。

一个c++实现的实时曲线显示类

一个c++实现的实时曲线显示类

一个c++实现的实时曲线显示类目录1.简介 (2)2.功能描述 (2)3.编译和链接 (2)4.运行环境 (2)5.兼容性和可移植性 (2)6.接口和使用 (2)6.1. 接口 (2)6.2. 使用方法 (3)7.范例 (3)1.简介一个c++实现的实时曲线显示类。

2.功能描述本封装模块的功能就是实现在MFC程序中画曲线,可以添加多条曲线,设置曲线取值范围。

3.编译和链接C++开发环境(vc6.0,vs2008)。

4.运行环境Windows5.兼容性和可移植性标准C++实现6.接口和使用6.1. 接口/*** @brief 添加一条曲线** @param color曲线颜色* @param Upper最大值* @param Lower最小值* @return TRUE 成功 FALSE 失败*/BOOL CLineChartCtrl::Add(COLORREF color, int Upper, int Lower)/*** @brief 设置曲线Y轴值** @param nIndex 曲线索引* @param nPos 曲线Y轴值* @return 上一个点的Y轴值*/int CLineChartCtrl::SetPos(int nIndex, int nPos)/*** @brief 绘制曲线** @param 无* @return 无*/void CLineChartCtrl::Go()6.2. 使用方法拷贝LineChartCtrl.h和LineChartCtrl.cpp文件到工程中,包含LineChartCtrl.h 头文件即可使用7.范例参见例子代码。

demo.rar。

第二章Visual C++6.0 绘图基础1

第二章Visual C++6.0  绘图基础1

OnPaint() 屏蔽了OnDraw()函数,不绘制椭 圆。如果删除此函数,则绘制结果为椭圆。
CWindowDC类:
整个屏幕区域的显示器设备上下文类 。包括客户区
(工具栏、状态栏和视图窗口的客户区)和非客户区 (标题栏和菜单栏)。 •CWindowDC允许在整个屏幕区域内进行绘图,其构造函 数 自 动 调 用 GetWindowDC() , 析 构 函 数 自 动 调 用 ReleaseDC()函数。 •CWindowDC 中 点 ( 0 , 0 ) 在 屏 幕 的 左 上 角 , 而 CClientDC 和CPaintDC中点(0,0)是屏幕客户区的左 上角。 •如果在 CTestView 类中使用 CWindowDC 类对象进行绘图, 只有在使用 GetParent() 函数获得CWnd指针后,才能在
2.3.3 使用GDI对象
创建画笔: 调用函数创建画笔:BOOL CreatePen(int nPenStyle,int nWidth,COLORREF crColor) 使用构造函数直接定义画笔: CPen(int nPenStyle,int nWidth,COLORREF crColor)

2.3.3 使用GDI对象
ቤተ መጻሕፍቲ ባይዱ
是编写在OnDraw()中。
•请注意,如果使用OnPaint()函数响应了WM_PAINT消息, 则OnDraw()函数将会被自动屏蔽。
void CTestView::OnDraw(CDC* pDC)//绘制椭圆 { CTestDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here pDC->Ellipse(100,70,900,570); }

动态绘制bezier曲线

动态绘制bezier曲线

在VC6.0坏境下,用mfc编写的绘制3次Bezier曲线的完整代码,其功能为:单击左键绘制控制多边形和坐标点,单击右键绘制曲线。

具体操作步骤如下:(1)新建mfc,工程名为Bezier。

(2)编辑菜单资源并添加消息处理函数OnBezier。

(3)在工程主文件中编写代码如下(红色字体为要添加代码)。

// BezierView.cpp : implementation of the CBezierView class//#include "stdafx.h"#include "Bezier.h"#include "BezierDoc.h"#include "BezierView.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#define T 20#endif/////////////////////////////////////////////////////////////////////////////// CBezierViewIMPLEMENT_DYNCREATE(CBezierView, CView)BEGIN_MESSAGE_MAP(CBezierView, CView)//{{AFX_MSG_MAP(CBezierView)// NOTE - the ClassWizard will add and remove mapping macros here.// DO NOT EDIT what you see in these blocks of generated code!ON_WM_RBUTTONDOWN()ON_WM_LBUTTONDOWN()//}}AFX_MSG_MAP// Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)END_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// CBezierView construction/destructionCBezierView::CBezierView(){// TODO: add construction code here}CBezierView::~CBezierView(){}BOOL CBezierView::PreCreateWindow(CREATESTRUCT& cs){// TODO: Modify the Window class or styles here by modifying// the CREATESTRUCT csreturn CView::PreCreateWindow(cs);}/////////////////////////////////////////////////////////////////////////////// CBezierView drawingvoid CBezierView::OnDraw(CDC* pDC){CBezierDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDC->TextOut(30,20,"开始绘制3次Bezier曲线,单击左键绘制控制多边形,单击右键绘制曲线");// TODO: add draw code for native data here}/////////////////////////////////////////////////////////////////////////////// CBezierView printingBOOL CBezierView::OnPreparePrinting(CPrintInfo* pInfo){// default preparationreturn DoPreparePrinting(pInfo);}void CBezierView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add extra initialization before printing}void CBezierView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){// TODO: add cleanup after printing}/////////////////////////////////////////////////////////////////////////////// CBezierView diagnostics#ifdef _DEBUGvoid CBezierView::AssertValid() const{CView::AssertValid();}void CBezierView::Dump(CDumpContext& dc) const{CView::Dump(dc);}CBezierDoc* CBezierView::GetDocument() // non-debug version is inline{ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CBezierDoc)));return (CBezierDoc*)m_pDocument;}#endif //_DEBUG/////////////////////////////////////////////////////////////////////////////// CBezierView message handlersint k=0;float BEN[4][4]={-1,3,-3,1, 3,-6,3,0, -3,3,0,0, 1,0,0,0};float point[4][3] ={100,100,1,200,300,1,400,300,1,300,100,1};//给定控制点void bezier(CDC*pDC,int n, int t, float p[4][3]);void matx44(float a[4][4],float b[4][3],float c[4][3]);void matx14(float a[4],float b[4][3], float c[3]);void bezier (CDC*pDC,int n,int t, float point[4][3]) //绘制Bezier曲线{float cc[4][3];float pp[3];int i,xx,yy,a,b;float u[4];u[3]=1.0;a=point[0][0],b=point[0][1]; // 第一个控制点的横、纵坐标for(i=2;i<=T;i++){u[2]=(1.0/T)*i;u[1]=u[2]*u[2];u[0]=u[2]*u[2]*u[2];matx44(BEN,point,cc);matx14(u,cc,pp); xx=pp[0],yy=pp[1];pDC->MoveTo(a,b);pDC->LineTo(xx,yy);a=xx;b=yy;}}void matx44(float a[4][4],float b[4][3],float c[4][3]){int i,j,m;for(i=0;i<4;i++)for(j=0;j<3;j++) c[i][j]=0.0; //初始化中间矩阵for(m=0;m<4;m++)for(i=0;i<3;i++)for(j=0;j<4;j++)c[m][i]+=a[m][j]*b[j][i];return;}void matx14(float a[4],float b[4][3], float c[3]){int i,j;c[0]=c[1]=c[2]=0.0;// 曲线点for(i=0;i<3;i++)for(j=0;j<4;j++)c[i]+=a[j]*b[j][i];return;}void CBezierView::OnBezier(){CDC *pDC=GetDC();//pDC->TextOut(30,20,"开始绘制3次Bezier曲线,单击左键绘制控制多边形,单击右键绘制曲线");float xx,yy;for(int j=0;j<4;j++) // 绘制控制点{xx=point[j][0];yy=point[j][1];pDC->MoveTo(xx-3,yy-3);pDC->LineTo(xx+3,yy+3);pDC->MoveTo(xx-3,yy+3);pDC->LineTo(xx+3,yy-3);}bezier(pDC,4, T, point);ReleaseDC(pDC);}void CBezierView::OnRButtonDown(UINT nFlags, CPoint point)//调用绘制函数{// TODO: Add your message handler code here and/or call defaultOnBezier();//CBezierView::OnRButtonDown(nFlags, point);}void CBezierView::OnLButtonDown(UINT nFlags, CPoint point1)//获得屏幕控制点坐标{// TODO: Add your message handler code here and/or call default//CBezierView::OnLButtonDown(nFlags, point);CDC *pDC=GetDC();float xx,yy;if(k<4){point[k][0]=point1.x;point[k][1]=point1.y;xx=point[k][0];yy=point[k][1];pDC->MoveTo(xx-3,yy-3);pDC->LineTo(xx+3,yy+3);pDC->MoveTo(xx-3,yy+3);pDC->LineTo(xx+3,yy-3);if(k>=1){pDC->MoveTo(point[k-1][0],point[k-1][1]);pDC->LineTo(xx,yy);}k++;}}// BezierView.h : interface of the CBezierView class///////////////////////////////////////////////////////////////////////////////#if !defined(AFX_BEZIERVIEW_H__8885C30A_7A50_4D01_860B_812CED746C52__INCLUDED_) #define AFX_BEZIERVIEW_H__8885C30A_7A50_4D01_860B_812CED746C52__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CBezierView : public CView{protected: // create from serialization onlyCBezierView();DECLARE_DYNCREATE(CBezierView)// Attributespublic:CBezierDoc* GetDocument();// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CBezierView)public:virtual void OnDraw(CDC* pDC); // overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CBezierView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CBezierView)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !afx_msg void OnBezier();afx_msg void OnRButtonDown(UINT nFlags, CPoint point);afx_msg void OnLButtonDown(UINT nFlags, CPoint point);//}}AFX_MSGDECLARE_MESSAGE_MAP()};#ifndef _DEBUG // debug version in BezierView.cppinline CBezierDoc* CBezierView::GetDocument(){ return (CBezierDoc*)m_pDocument; }#endif///////////////////////////////////////////////////////////////////////////////{{AFX_INSERT_LOCATION}}// Microsoft Visual C++ will insert additional declarations immediately before the previous line.#endif// !defined(AFX_BEZIERVIEW_H__8885C30A_7A50_4D01_860B_812CED746C52__INCLUDED_)(4)编译运行程序,查看运行结果,如下图单击左键绘制控制多边形,单击右键绘制曲线。

VC—++绘制正弦曲线

VC—++绘制正弦曲线

本作业的重点是映射模式的设置以及绘图函数的循环算法,其中映射模式是一个比较难理解的话题,在以后的学习中要多应用以加深对其的理解和掌握。
(三)界面
运行结果:
(四)类设计
制作过程:
(1)首先建立一个基于单文档的工程,如下:
(2)在CsinView的void CSinView::OnDraw(CDC* pDC)中添加映射模式语句如下:
CRect rect;
GetClientRect(&rect);
rect.top += 10;
rect.left += 10;
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
CRect rect;
GetClientRect(&rect);
rect.top += 10;
rect.left += 10;
rect.right -= 10;
rect.bottom -= 10;
pDC->TextOut(100,100,"y=sin(x)");
CPen pen(PS_SOLID,2,RGB(0,0,255));
CPen * pOld = pDC->SelectObject(&pen);
for (int i=0; i<=1800; i++)
{
double pi = 3.1415926535;
pDC->SetMapMode(MM_ANISOTROPIC);
//pDC->SetMapMode(MM_ISOTROPIC);
pDC->SetViewportOrg(10,10);

VC6.0 项目 拟合曲线

VC6.0 项目 拟合曲线

/****/
using namespace std;
/****/
///////////////////////////////////////////////////////////////////////////////////
/****/ #define A_UNITX 32 #define A_UNITY 32 /****/ #define B_UNITX 250 #define B_UNITY 0.01 /****/ #define ZT_UNIT 1 /****/ #define POINT_SIZE 4 /****/ #define X_ONE_NUM 20 #define Y_ONE_NUM 20 /****/ /////////////////////////////////////////////////////////////////////////////////// /****/ HWND GetConsoleHwnd(void); /****/ void print_pot_1(int x,int y,HDC pdc); /****/ void print_pot(double point[size][2],int n,int zero[2],HDC pdc,
#include "get_hanshu.h"
/****/
///////////////////////////////////////////////////////////////////////////////////
/****/
#define DEBUG_PRINT
/****/
///////////////////////////////////////////////////////////////////////////////////

VC++6.0中MsChart的使用方法

VC++6.0中MsChart的使用方法

VC++6.0中MsChart的使用方法VC++6.0中MsChart的使用方法1.MSChart制图类1.1 添加MSChart控件MSChart是VC++6.0中自带的一个特殊控件类,用于绘制坐标曲线图。

如果要使用这个控件,则可以按下图的示意进行添加此控件。

1.2MSChart控件的使用方法首先在要使用的类的实现文件中包含如下头文件:#include "VcPlot.h"#include "VcAxis.h"#include "VcValueScale.h"#include "VcSeriesCollection.h"#include "VcSeries.h"#include "VcPen.h"#include "VcCategoryScale.h"#include "VcColor.h"#include "VcDataGrid.h"#include "VcBackdrop.h"#include "VcFill.h"#include "VcBrush.h"#include "VcDataPoints.h"#include "VcDataPoint.h"#include "VcDataPointLabel.h"#include "VcAxisTitle.h"#include "math.h"在要使用的类的头文件中包含:#include "mschart.h"本系统中按照如下函数调用来实现MSChart类绘制故障树重要度曲线的功能(CDrawImp是调用MSChart的类)。

VC6.0简单绘图说明

VC6.0简单绘图说明

第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。

有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。

可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。

初学编程想要绘图就得用TC,很是无奈。

还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。

所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。

新的图形学的书有不少是用的OpenGL,可是门槛依然很高。

要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。

下面是VC下简单绘图函数的基本说明。

1.系统支持操作系统版本:Windows 2000 及以上系统。

编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。

2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。

安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。

安装程序不会修改注册表或者本机的任何文件。

如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。

3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。

实验4 Beizer曲线

实验4 Beizer曲线

实验4、Beizer曲线系别:计算机学院专业班级:10信科2姓名:学号:实验日期:实验报告日期:一、实验目的1熟悉VC6.0开发平台;2熟悉OpenGL开发库;二、实验内容:1.自己编写函数实现三次一段Bezier曲线的绘制。

2.调用OpenGL函数绘制两段Bezier曲线并实现拼接,要求在节点处满足一阶几何连续。

三、实验指导:算法实现过程中需要计算两个矩阵的乘积。

由于参与运算的两个矩阵的大小不确定,而C 语言中二维数组作参数至多省略第一维的大小显得不够灵活,而一维数组做参数则不受此限制。

因此,在实现矩阵乘积时用一维数组代替二维数组,调用该函数前也需要将二维数组转化为一维数组,转化方法是遵循C语言的行优先。

函数实现如下://计算矩阵A左乘矩阵B的值,结果存入C。

其中,A、B、C的大小分别为mxn、nxp、mxp //二维数组作参数至少第二维的大小必须是确定的,此处为了使矩阵的两个维大小均可变,将二维数组转化为一维数组进行处理// 传递实参A、B时,要求其中的数据存放顺序与C语言中二维数组存放顺序一致,即行优先。

//输入参数:m为第一个矩阵的行数和结构矩阵的行数,p为第一个矩阵的列数,第二个矩阵的行数,n为第二个矩阵的列数和结果矩阵的列数void matrix_mul(double A[], double B[], double C[], int m, int n, int p){for (int i = 0; i < m; i++){for (int j = 0; j < p; j++){C[i*p+j] = 0;//C[i][j]对应一维数组的C[i*p+j]for (int k = 0; k < n; k++){C[i*p+j] += A[i*n+k] * B[k*p+j];//A[i][k]对应一维数组的A[i*n+k];B[k][j]对应一维数组的B[k*p+j]}}}}此外,计算出各型值点后调用glBegin(GL_LINE_STRIP),用首尾相连的这线段连接起来即得到三次Beizer曲线。

如何在VC++6.0下实现贝济埃曲线的绘制

如何在VC++6.0下实现贝济埃曲线的绘制
CP n o d e ; e l p n
C e : Viw On But n w n( Fa s on ) L to Do n lg ,p it : } vi odCDrw B z iw: a e Ve :On ut n w n UI Tn lg , on RB to Do ( N Fa s CP it p it on ) (
f F e ̄N w菜 单 ,单 击 Po c 标 签 ,选 择 MF pWi r i- e l r et j CA p z d a ee , 输 人 程 名 Da B z 在 第 ~ 步 中 选 择 Snl D e— x] rw e。 i e ou g m n, 他 各 步 都 用 默 认 设 置 ,最 后 单 击 f s, 成 工 程 的 建 et其 i h完 n
O L ut D w ( 、O R u o D w ( 、O M ue v ( 、 O R n B t n o n ) n B t n o n ) n o sMo e ) o t n— Btn p ) ut U ( 。 o
刻绘制出 一 贝济埃曲线。如 果想调整该曲线 ,只要对准 贝济 条
埃 曲 线 的 4 折 点 中 的 一个 ,按 F鼠标 右 键 ,拖 动 鼠标 到需 要 个
的位 置 ,贝 济 埃 曲 线 亦 随 着 移 动 ,直 到 满 意 为 止 。 下 面 介 绍
V C++下 绘 制 能移 动 的 贝 济埃 曲线 的步 骤 :
步骤 1 启 动 V . c+ +60 . .生 成 名 为 Da B z的 工 程 。 选 rw e
步 骤 6 给 O L ut D w ( 、 O R u oD w ( 、 0 — . n B l n o n ) n B tn o n ) o t n M ue v( 、 O R ut U (函 数 中分 别 添 加 代码 如下 : osMoe ) n B t n p ) o

VC6.0中画图用的chart控件

VC6.0中画图用的chart控件

//设置背景颜色 m_Chart.GetBackdrop().GetFill().SetStyle(1); m_Chart.GetBackdrop().GetFill().GetBrush().GetFillColor().Set(255, 255, 255);
//设置数据系列的颜色:如果是曲线图则对应每条曲线的颜色 for (int i = 1; i <= m_Chart.GetColumnCount(); i++ ) {//这里设置为随机颜色 m_Chart.GetPlot().GetSeriesCollection().GetItem(i).GetPen().GetVtColor().Set(rand() * 230 / RAND_MAX, rand() * 230 / RAND_MAX, rand() * 230 / RAND_MAX); m_Chart.GetPlot().GetSeriesCollection().GetItem(i).GetDataPoints().GetItem(-1).GetDataPointLabel().SetLocationType(1); } //设置 x 轴的其他属性 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetAuto(FALSE); // 不自动标注 X 轴刻度 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerLabel(1);// 每刻度一个标注 m_Chart.GetPlot().GetAxis(0,var).GetCategoryScale().SetDivisionsPerTick(1); // 每刻度一个刻度线

VC++6.0实现计算方法中的曲线拟合

VC++6.0实现计算方法中的曲线拟合

VC++6.0实现计算方法中的曲线拟合
高照玲;周浩尚;蒋波
【期刊名称】《农业装备与车辆工程》
【年(卷),期】2011(000)011
【摘要】在处理实际问题中测得的实验数据时利用最小二乘法寻求较简单函数逼近,达到曲线拟合的目的.该种方法在解决类似问题的数椐处理和误差分析中应用非常广泛,可提高数据处理的效率和精确度,已成为这类问题数据处理的重要的比较可靠的技术手段.根据最小二乘法原理,用多项式拟合方法来绘制曲线,并且给出了精确的C++算法.
【总页数】4页(P57-59,61)
【作者】高照玲;周浩尚;蒋波
【作者单位】山东省内燃机研究所,山东济南250100;山东省内燃机研究所,山东济南250100;天津大学电气与自动化工程学院天津300072
【正文语种】中文
【中图分类】TK417+.4
【相关文献】
1.用VC++6.0中MSComm控件实现多类型文件传送 [J], 王保印;康健;姜传国
2.基于局域网的通讯程序在VC++6.0中的设计与实现 [J], 邓雪莲;张红霞
3.在VC++6.0中实现程序单一运行 [J], 梦凡
4.VC++6.0中实现矢量图的分层绘制、打印 [J], 李盟
5.在VC++6.0中利用WinSock实现双机通信 [J], 罗艳丽;秦开宇;金燕华
因版权原因,仅展示原文概要,查看原文内容请购买。

VC6.0简单绘图说明

VC6.0简单绘图说明

第二章VC6.0简单绘图说明许多学编程的都是从C 语言开始入门的,而目前的现状是:有些学校以Turbo C 为环境讲C 语言,只是Turbo C 的环境实在太老了,复制粘贴都很不方便。

有些学校直接拿VC 来讲C 语言,因为VC 的编辑和调试环境都很优秀,并且VC 有适合教学的免费版本。

可惜在VC 下只能做一些文字性的练习题,想画条直线画个圆都很难,还要注册窗口类、建消息循环等等,初学者会受严重打击的。

初学编程想要绘图就得用TC,很是无奈。

还有计算机图形学,这门课程的重点是绘图算法,而不是Windows 编程。

所以,许多老师不得不用TC 教学,因为Windows 绘图太复杂了,会偏离教学的重点。

新的图形学的书有不少是用的OpenGL,可是门槛依然很高。

要给初学者一个简单的学习平台,就要VC的开发平台和TC的简单的绘图功能,于是就有了这个EasyX 库,我们需要在VC下下载安装EasyX库,下载地址:http:///。

下面是VC下简单绘图函数的基本说明。

1.系统支持操作系统版本:Windows 2000 及以上系统。

编译环境版本:Visual C++ 6.0 / 2008(x86 & x64) / 2010(x86 & x64)。

2.安装请先将下载的压缩包解压缩,然后执行Setup.hta,并跟随提示安装。

安装程序会检测已经安装的VC 版本,并根据选择将对应的.h 和.lib 文件安装至VC 的include 和lib 文件夹内。

安装程序不会修改注册表或者本机的任何文件。

如果需要手动安装,请根据下面的文件列表说明将安装包里的相关文件分别复制到VC 对应的include 和lib 文件夹内,或者将include 和lib 文件夹放到任意位置,然后修改VC 中的Lib 和Include 的引用路径。

3.卸载由于安装程序并不改写注册表,因此在“添加删除程序”中不会看到EasyX 的卸载项。

VC6屏幕的绘图基础总结

VC6屏幕的绘图基础总结

VC6屏幕的绘图基础总结VC6屏幕的绘图基础总结VC6屏幕的绘图基础总结在VC6中,屏幕绘图是通过设备环境(Device Context)实现的,它是GDI的的关键元素。

一、设备环境获取的一些函数:WINUSERAPI HDC WINAPI GetDC(HWND hWnd); //获取窗口的设备环境WINUSERAPI HDC WINAPI GetWindowDC( HWND hWnd);WINGDIAPI HDC WINAPI CreateCompatibleDC(HDC);二、设备环境的坐标:(1)、设备坐标:指的是显示设备或者打印设备坐标系下的坐标。

这种坐标以设备上的像素点为坐标单位,通常情况下,它的原点在窗口客户区的左上角。

(2)、逻辑坐标:指的是各种映射模式下的坐标。

(3)、物理坐标:指的是开发人员自定义的坐标。

三、设备环境的颜色COLORREF数据类型,用8位十六进制值0x00bbggrr表示一个RGB(红、绿、蓝)值,每个颜色分量的最大值为0xff。

获取一个COLORREF变量的各分量颜色值的宏:BYTE GetRValue(DWORD rgb); //取得红色分量值BYTE GetGValue(DWORD rgb); //取得绿色分量值BYET GetBValue(DWORD rgb); //取得蓝色分量值COLORREF RGB(BYTE red,BYTE green,BYTE blue);四、使用GDI对象定义GDI对象后,要用SelectObject()函数把定义的GDI对象选择用在当前的环境中。

例如:HDC hdc;HBRUSH hbr;hdc=GetDC(hwnd);hbr=CreateSolidBrush(RGB(255,0,0));SelectObject(hdc,hbr);五、使用画刷画刷(HBRUSH)可以用来填充指定区域的特性。

画刷通常包括填充颜色、填充图案、填充样式3种属性。

VC++6.0绘图基础

VC++6.0绘图基础

2.3.3 CDC类的主要绘图成员函数
1. 绘制像素函数
• 类属:CDC::SetPixel • 原型:COLORREF SetPixel(int x,int y,COLORREF crColor ); • 设置某像素点的RGB值
1. 绘制像素函数
• 参数说明:SetPixel 函数中,COLORREF是32位 颜色数据类型; • 第一和第二个参数x,y是像素点位置的逻辑坐标 值, • 第三个参数crColor是像素点的颜色值, COLORREF型变量可以利用RGB(bRed, bGreen,bBlue)来指定相应的颜色值,每种颜 色用一个字节表示,可以被设定为0~255之间的 任意值,0代表无色,255代表全色。
MM_TWIPS
MM_ISOTROPIC
MM_ANSIOTROPIC
映射模式
• 在缺省情况下,一般使用的是设备坐标系 MM_TEXT,坐标原点位于客户区的左上角, X轴水平向右,Y轴垂直向下,坐标基本单 位为一个像素。
1. 设置映射模式函数
• 类属:CDC::SetMapMode • 原型:virtual int SetMapMode(int nMapMode ); • 返回值:原映射模式。 • 参数说明:nMapMode是表2-1的模式代码。
• 在【Resource View】 面板中显示所创建的 资源
• 在【FileView】面板中 显示源程序文件,主 要包括程序源文件 (*.CPP) 、头文件 (*.h) 和资源文件 (*.ico、*.bmp等)
• 从【ClassView】面板可以看出
– CTestApp是应用的主函数类,用来处理消息。 – MFC中的数据是存储在CTestDoc类文档中 – 结果的显示是在CTestView类中 – 文档类负责管理和维护数据本身 – 视图类负责处理用户鼠标和键盘的操作

vc实验报告-画正弦曲线

vc实验报告-画正弦曲线

武汉理工大学理学院数学系课程实验报告课程名称:VC程序设计

日期成绩评定级


实验室理学院机房老师签名学



画正弦曲线函数曲线



VC++6.0,office





利用vc++6.0编写程序,画出正弦函数曲线





1、新建MFC APP wizard工程,建立单文档并命名为Sin







CFont font,*pOldFont;
font.CreateFont(100,0,0,0,400,FALSE,FALSE,0,
ANSI_CHARSET,OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
DEFAULT_PITCH | FF_SWISS, "Arial");
pOldFont=(CFont*)pDC->SelectObject(&font);
pDC->TextOut(-200,200,"y=sin x");
7、运行程序,观察结果。

实验结果及分析
我们发现,当我们改变窗口大小时,曲线的大小也跟着改变,总是充满整个窗口:
改变视图窗口大小:
分析:
这是因为程序中我们采用可变比例映射模式,在逻辑坐标系中作图,然后映射到设备坐标系中,这样,当设备坐标系大小发生改变时,所画图形也会改变。

(写不完时,可另附稿纸。


备注:不交此报告者,本次实验为“不合格”。

一个c++实现的实时曲线显示类

一个c++实现的实时曲线显示类

一个c++实现的实时曲线显示类目录1.简介 (2)2.功能描述 (2)3.编译和链接 (2)4.运行环境 (2)5.兼容性和可移植性 (2)6.接口和使用 (2)6.1. 接口 (2)6.2. 使用方法 (3)7.范例 (3)1.简介一个c++实现的实时曲线显示类。

2.功能描述本封装模块的功能就是实现在MFC程序中画曲线,可以添加多条曲线,设置曲线取值范围。

3.编译和链接C++开发环境(vc6.0,vs2008)。

4.运行环境Windows5.兼容性和可移植性标准C++实现6.接口和使用6.1. 接口/*** @brief 添加一条曲线** @param color曲线颜色* @param Upper最大值* @param Lower最小值* @return TRUE 成功 FALSE 失败*/BOOL CLineChartCtrl::Add(COLORREF color, int Upper, int Lower)/*** @brief 设置曲线Y轴值** @param nIndex 曲线索引* @param nPos 曲线Y轴值* @return 上一个点的Y轴值*/int CLineChartCtrl::SetPos(int nIndex, int nPos)/*** @brief 绘制曲线** @param 无* @return 无*/void CLineChartCtrl::Go()6.2. 使用方法拷贝LineChartCtrl.h和LineChartCtrl.cpp文件到工程中,包含LineChartCtrl.h 头文件即可使用7.范例参见例子代码。

demo.rar。

如何在VC+ +6.0下实现贝济埃曲线的绘制

如何在VC+ +6.0下实现贝济埃曲线的绘制

如何在VC+ +6.0下实现贝济埃曲线的绘制
苏百兖
【期刊名称】《电脑编程技巧与维护》
【年(卷),期】2007(000)012
【摘要】@@ 贝济埃曲线是经法国数学家皮埃尔·贝济埃命名的.在一条贝塞尔曲线上,两个中点控制柄的位置足经描述一条不平滑曲线的总体形状.
【总页数】2页(P85-86)
【作者】苏百兖
【作者单位】无
【正文语种】中文
【中图分类】TP3
【相关文献】
1.如何在MFC中利用OpenGL实现三维图形的绘制 [J], 汪日伟;韩其睿;吴晓青
2.用VC+ +实现上位机与AT89C52的串行通信 [J], 张新海
3.VC++下贝济埃曲线的绘制 [J], 苏百兖;杜永生
4.如何在网页上实现Java3D绘制图像 [J], 邓定华;颜武;张万斌;胡卓南
5.基于VC+ +的圆锥投影正解和反解软件设计与实现 [J], 韩尤杰;尹继法;刘新华因版权原因,仅展示原文概要,查看原文内容请购买。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

py=630-(pointy[0]-pymin)*stepy;
dc.MoveTo(px,py);
for(j=1;j<i;j++) {
px=(pointx[j]-pxmin)*stepx+100;
py=630-(pointy[j]-pymin)*stepy;
dc.LineTo(px,py);}
}
金广林 2011 年 6 月 17 日星期五
VC6.0 中画曲线的函数 OnHqx() {
CClientDC dc(this); CPen pen; pen.CreatePen(PS_SOLID,1,0x000000ff); dc.SelectObject(&pen); CBrush brush; brush.CreateSolidBrush(0x000000ff); dc.SelectObject(&brush); int i,j; double pxmax,pxmin,pymax,pymin,stepx,
pointx[0]=0.1399;
pointy[0]=-84.20;
pointx[1]=0.4409;
pointy[1]=-99.80;
pointx[2]=0.6170;
pointy[9;
pointy[3]=-114.20;
pointx[4]=0.8388;
px,py,stepy,pointx[100],pointy[100]; i=10; //总点数,可修改 //图形的范围为 800*600
//点坐标清零 for(j=0;j<i;j++) {
pointx[j]=0; pointy[j]=0;} //x 轴和向右的箭头 dc.MoveTo(50,650); dc.LineTo(850,650); dc.MoveTo(850,650); dc.LineTo(800,655); dc.MoveTo(850,650); dc.LineTo(800,645); //y 轴和向上的箭头 dc.MoveTo(50,650); dc.LineTo(50,50); dc.MoveTo(50,50); dc.LineTo(45,100); dc.MoveTo(50,50); dc.LineTo(55,100);
pointy[3]=-45.35;
pointx[4]=0.8388;
pointy[4]=-48.13;
pxmax=pointx[0]; pxmin=pointx[0]; pymax=pointy[0]; pymin=pointy[0]; //找出最大值和最小值。 for(j=1;j<i;j++) {
//下面输入数据:
i=5; //总点数,可修改 //下面是浓度的对数值和 K 的电压值:
pointx[0]=0.1399;
pointy[0]=-15.56;
pointx[1]=0.4409;
pointy[1]=-29.12;
pointx[2]=0.6170;
pointy[2]=-38.20;
pointx[3]=0.7419;
//
改笔颜色可用下面的语句:
//
pen.DeleteObject();
//
pen.CreatePen(PS_SOLID,1,0x00ff0000);
//
dc.SelectObject(&pen);
dc.TextOut(400,50,"红色的是浓度的对数值和 k 的电压值的曲线。");
px=(pointx[0]-pxmin)*stepx+100;
if (pointx[j]>pxmax) pxmax=pointx[j];
if (pointx[j]<pxmin) pxmin=pointx[j];
if (pointy[j]>pymax) pymax=pointy[j];
if (pointy[j]<pymin) pymin=pointy[j];
} stepx=800/(pxmax-pxmin); stepy=600/(pymax-pymin);
if (pointx[j]<pxmin) pxmin=pointx[j];
if (pointy[j]>pymax) pymax=pointy[j];
if (pointy[j]<pymin) pymin=pointy[j];
} stepx=800/(pxmax-pxmin); stepy=600/(pymax-pymin);
pointy[4]=-115.89;
pxmax=pointx[0]; pxmin=pointx[0]; pymax=pointy[0]; pymin=pointy[0];
//找出最大值和最小值。 for(j=1;j<i;j++) {
if (pointx[j]>pxmax) pxmax=pointx[j];
py=630-(pointy[0]-pymin)*stepy;
dc.MoveTo(px,py);
for(j=1;j<i;j++) {
px=(pointx[j]-pxmin)*stepx+100;
py=630-(pointy[j]-pymin)*stepy;
dc.LineTo(px,py);}
//下面是浓度的对数值和 Na 的电压值:
//
改笔颜色可用下面的语句:
pen.DeleteObject();
pen.CreatePen(PS_SOLID,1,0x00ff0000);
dc.SelectObject(&pen);
dc.TextOut(400,80,"蓝色的是浓度的对数值和 Na 的电压值的曲线。");
px=(pointx[0]-pxmin)*stepx+100;
相关文档
最新文档