posts - 64,comments - 18,trackbacks - 0

终于完成了A阶段,下面可以进入B阶段了,主要集中在程序的UI上,另外考虑如何提升速度。

我的临时文档,看起来好乱,程序里的标识符也没完全按文档里的来,真是乱套了,明天好好修改修改。

 

 

放入MyDefine.h,MyDefine.cpp文件

1. 河的边线

Doc里放入:

//num of ctrl pnt,nodal pnt,display style,

//wave speed wave distance and wave num

int ctrlNum,ndlNum,style,wSpeed,wDistance,wNum;

//the pnt array represent ctrl pnts and nodal pnts.

CArray <CPoint,CPoint&> c_PntsL,c_PntR,n_PntsL,n_PntsR;

视图类和文档类都要引用MyDefine.h,用#ifndef

以下内容放在视图类里的OnCreate函数中,先为CView的派生类声明一个图元文件的数据成员HMETAFILE m_hMetaFile;

CArray <CPoint,CPoint&> initL,initR;

//预先输入的控制点,自定义

Int const Max=60;

//CArray <CPointPartner,CPointPartner&> init_CPntPtr,final_CPntPtr;

//CPointPartner作为TYPE有问题,还是用数组

//改为:

CPointPartner init_CPntPtr[Max],final_CPntPtr[Max];

//最后的点对数组final_CPntPtr给CCurve类用

While(i<Num)

{

CPointPartner temp_CPntPtr (initL[i],initR[i]);

init_CPntPtr.Add(temp_CPntPtr);

i++;

}

//鼠标点击或预先指定控制点,即一些点对

//以及处理后得到的点对

CSpline spL (initL);

CSpline spR (initR);

//两边的样条曲线

CArray<CPoint,CPoint&> finalL,finalR;

//处理后得到的样条曲线上的点

spL.GetPoints(finalL);

spR.GetPoints(finalR);

Count=finalL.GetSize();

For(int i=0;i<count;i++)

{

CPointPartner Temp_finalP (finalL[i],finalR[i])

Final_CPntPtr[i]=temp_finalP;//重载=运算符

}

//将样条对象spL,spR里的点放入finalL和finalR,之后又放入点对数组final_CPntPtr;

//共count个点对

CMetaFileDC metaFileDC;

metaFileDC.Create();

这里画出边线(通过finalL和finalR

m_hMetaFile=metaFileDC.Close();

5.23晚19:30以上程序的调试已完成(未加鼠标控制)

2. 一道道波纹(CCurve类)

在视图类中声明数据:CArray<Points,Points&> mPntsCurve;

在OnDraw里

先确定水波位置:

WavePL[i]和WavePR[i]

For(int i=0,i<WaveN;i++)

{

CCurve tempCurve (final_CPntPtr[i]);

tempCurve.ComputePnts(mPntsCurve);

连这些点成线

}

详细设计:

Doc里定义两个点,

View里定义一个函数BOOL ComputePnts(CArray<CPoint,CPoint&>& m_Pnts,CPoint m_LPnt,CPoint m_RPnt)

OnDraw里给两个点赋值,调用ComputePnts,再绘图

MFC的联系

//用图元文件保存边线,中间的curve即时画出来

//要描绘的点,每两点画条线连接LineTO

或者将点集的计算都放在文档类中,给文档类新建两个函数

数据的放置位置还得琢磨琢磨

5.21 晚12:00此文档完成

Spline的计算在CDoc里,Curve的计算在CView

5. 29 晚1:47 添加(明天再修改)

 

5.30

Q: Spline里的temp值使得数组越界问题

A: 精度造成的,两个float型变量t和T1[j1+1]都为0.90000,但t>T1[j1+1]为true,

Tips

1. 查找类型强制转换以及精度丢失的知识

2. 看林锐的《高质量C++编程》,注意这些细节。

5.31

已完成:位图作为背景。

 

Q:鼠标控制的问题

posted on 2007-05-30 02:01 rebol 阅读(250) 评论(0)  编辑 收藏 引用 所属分类: Final work LOG

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理