終于完成了A階段,下面可以進(jìn)入B階段了,主要集中在程序的UI上,另外考慮如何提升速度。
我的臨時(shí)文檔,看起來好亂,程序里的標(biāo)識符也沒完全按文檔里的來,真是亂套了,明天好好修改修改。
放入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吧
以下內(nèi)容放在視圖類里的OnCreate函數(shù)中,先為CView的派生類聲明一個(gè)圖元文件的數(shù)據(jù)成員HMETAFILE m_hMetaFile;
CArray <CPoint,CPoint&> initL,initR;
//預(yù)先輸入的控制點(diǎn),自定義
Int const Max=60;
//CArray <CPointPartner,CPointPartner&> init_CPntPtr,final_CPntPtr;
//CPointPartner作為TYPE有問題,還是用數(shù)組
//改為:
CPointPartner init_CPntPtr[Max],final_CPntPtr[Max];
//最后的點(diǎn)對數(shù)組final_CPntPtr給CCurve類用
While(i<Num)
{
CPointPartner temp_CPntPtr (initL[i],initR[i]);
init_CPntPtr.Add(temp_CPntPtr);
i++;
}
//鼠標(biāo)點(diǎn)擊或預(yù)先指定控制點(diǎn),即一些點(diǎn)對
//以及處理后得到的點(diǎn)對
CSpline spL (initL);
CSpline spR (initR);
//兩邊的樣條曲線
CArray<CPoint,CPoint&> finalL,finalR;
//處理后得到的樣條曲線上的點(diǎn)
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;//重載=運(yùn)算符
}
//將樣條對象spL,spR里的點(diǎn)放入finalL和finalR,之后又放入點(diǎn)對數(shù)組final_CPntPtr;
//共count個(gè)點(diǎn)對
CMetaFileDC metaFileDC;
metaFileDC.Create();
這里畫出邊線(通過finalL和finalR)
m_hMetaFile=metaFileDC.Close();
5.23晚19:30以上程序的調(diào)試已完成(未加鼠標(biāo)控制)
2. 一道道波紋(CCurve類)
在視圖類中聲明數(shù)據(jù):CArray<Points,Points&> mPntsCurve;
在OnDraw里
先確定水波位置:
WavePL[i]和WavePR[i]
For(int i=0,i<WaveN;i++)
{
CCurve tempCurve (final_CPntPtr[i]);
tempCurve.ComputePnts(mPntsCurve);
連這些點(diǎn)成線
}
詳細(xì)設(shè)計(jì):
Doc里定義兩個(gè)點(diǎn),
View里定義一個(gè)函數(shù)BOOL ComputePnts(CArray<CPoint,CPoint&>& m_Pnts,CPoint m_LPnt,CPoint m_RPnt)
OnDraw里給兩個(gè)點(diǎn)賦值,調(diào)用ComputePnts,再繪圖
與MFC的聯(lián)系
//用圖元文件保存邊線,中間的curve即時(shí)畫出來
//要描繪的點(diǎn),每兩點(diǎn)畫條線連接LineTO
或者將點(diǎn)集的計(jì)算都放在文檔類中,給文檔類新建兩個(gè)函數(shù)
數(shù)據(jù)的放置位置還得琢磨琢磨
5.21 晚12:00此文檔完成
Spline的計(jì)算在CDoc里,Curve的計(jì)算在CView里
5. 29 晚1:47 添加(明天再修改)
5.30
Q: Spline里的temp值使得數(shù)組越界問題
A: 精度造成的,兩個(gè)float型變量t和T1[j1+1]都為0.90000,但t>T1[j1+1]為true,
Tips:
1. 查找類型強(qiáng)制轉(zhuǎn)換以及精度丟失的知識
2. 看林銳的《高質(zhì)量C++編程》,注意這些細(xì)節(jié)。
5.31
已完成:位圖作為背景。
Q:鼠標(biāo)控制的問題
posted on 2007-05-30 02:01
rebol 閱讀(272)
評論(0) 編輯 收藏 引用 所屬分類:
Final work LOG