读书人

VC++.net/MFC绘制一条曲线(比如y=0.1

发布时间: 2012-01-28 22:06:13 作者: rapoo

VC++.net/MFC绘制一条曲线(比如y=0.1x+2)的实现。
VC++.net/MFC绘制一条曲线(比如y=0.1x+2)的实现。
要求:1. 有坐标轴,坐标轴上要显示坐标。
2. 图像可以缩放
3. 鼠标停留在曲线上时显示坐标。



[解决办法]
整个比较简单
1.坐标轴用直线画
2.方程已经定了,缩放很容易
3.一个鼠标消息即可
/////////////////////画曲线函数////////////////////////////
////////////////////直角坐标下的////////////////////////
//y=fun(x)
//p---绘图设备指针
//fun---函数指针
//StartP1---x的起始值
//StartP2---x的终止值
//PX---坐标原点x方向位置
//PY---坐标原点y方向位置
//Mx---x方向放大倍数
//My---y方向放大倍数
/////////////////////////////////////////////////////////
void DrawCurve(HDC hDC,double (*fun)(double),double StartP1,double EndP1,int PX,int PY,double Mx,double My)
{
int i,N=int(Mx*(EndP1-StartP1));
double x,y,dx;
dx=(EndP1-StartP1)/N;
x=StartP1;
y=(*fun)(x);
MoveToEx(hDC,PX+int(x*Mx),PY-int(y*My),NULL);
for(i=1;i <=N;i++)
{
x=StartP1+i*dx;
y=(*fun)(x);
LineTo(hDC,PX+int(x*Mx),PY-int(y*My));
}

}
////////////////////任意坐标下的////////////////////////
void DrawCurve(HDC hDC,double (*funX)(double),double (*funY)(double),double StartT,double EndT,int PX,int PY,double M)
{
int i,N=int(M*(EndT-StartT));
double t,x,y,dt;
dt=(EndT-StartT)/N;
t=StartT;
x=(*funX)(t);
y=(*funY)(t);
MoveToEx(hDC,PX+int(x*M),PY-int(y*M),NULL);
for(i=1;i <=N;i++)
{
t=StartT+i*dt;
x=(*funX)(t);
y=(*funY)(t);
LineTo(hDC,PX+int(x*M),PY-int(y*M));
}

}

读书人网 >VC/MFC

热点推荐