資源簡(jiǎn)介
MFC實(shí)現(xiàn)的圖形在三維坐標(biāo)下,進(jìn)行坐標(biāo)平移、投影、對(duì)稱等變換。

代碼片段和文件信息
//?baseClass.cpp:?implementation?of?the?CMyClass?class.
//
//////////////////////////////////////////////////////////////////////
#include?“stdafx.h“
#include?“三維變換.h“
#include?“baseClass.h“
#include?“三維變換View.h“
#include?“math.h“
#define?PI?3.141592654
#ifdef?_DEBUG
#undef?THIS_FILE
static?char?THIS_FILE[]=__FILE__;
#define?new?DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
//?Construction/Destruction
//////////////////////////////////////////////////////////////////////
CbaseClass::CbaseClass()
{
?ed=2000eh=100od=400hl=1ps=0;
}
CbaseClass::~CbaseClass()
{
}
//?此函數(shù)賦軸測(cè)圖中立體上頂點(diǎn)的齊次坐標(biāo)值
void???CbaseClass::ReadWorkpiece()?
{
??X[1]?=?0;??Y[1]?=?0;??Z[1]?=?0;??C[1]?=?1;
??X[2]?=?45;??Y[2]?=?0;??Z[2]?=?0;??C[2]?=?1;
??X[3]?=?45;?Y[3]?=?37;??Z[3]?=?0;??C[3]?=?1;
??X[4]?=?0;??Y[4]?=?37;??Z[4]?=?0;??C[4]?=?1;
??X[5]?=?0;??Y[5]?=?37;??Z[5]?=?45;??C[5]?=?1;
??X[6]?=?0;??Y[6]?=?0;??Z[6]?=?45;??C[6]?=?1;
??X[7]?=?12;??Y[7]?=?0;??Z[7]?=?45;??C[7]?=?1;
??X[8]?=?30;??Y[8]?=?0;??Z[8]?=?14;??C[8]?=?1;
??X[9]?=?45;??Y[9]?=?0;??Z[9]?=?14;??C[9]?=?1;
??X[10]?=?45;??Y[10]?=?37;??Z[10]?=?14;??C[10]?=?1;
??X[11]?=?30;??Y[11]?=?37;??Z[11]?=?14;??C[11]?=?1;
??X[12]?=?12;??Y[12]?=?37;??Z[12]?=?45;??C[12]?=?1;
??X[13]?=?12;??Y[13]=21;??Z[13]=45;??C[13]?=?1;
// ?X[14]?=?22;??Y[14]=31;??Z[14]=27;??C[14]?=?1;
}
/***************************************************
*?此函數(shù)分別用于三個(gè)視圖的投影變換,統(tǒng)一用變換后頂?*
*?點(diǎn)的三個(gè)坐標(biāo)計(jì)算公式求其坐標(biāo)值。這三個(gè)公式是由點(diǎn)?*
*?的齊次坐標(biāo)乘以變換矩陣得來(lái)的。實(shí)際上每個(gè)視圖投影?*
*?只有二個(gè)非零坐標(biāo)需要計(jì)算求得,而另一個(gè)坐標(biāo)是零勿?*
*?需計(jì)算。因此也可以根據(jù)三個(gè)不同視圖的投影,分別采?*
*?用其投影后的二個(gè)坐標(biāo)計(jì)算式來(lái)求坐標(biāo)值。函數(shù)中可用?*
*?條件語(yǔ)句選擇不同視圖投影采用不同坐標(biāo)計(jì)算式求值。?*
***************************************************/
void???CbaseClass::Calculate(array2d?B)
{
??ReadWorkpiece();
??for?(int?i?=?1;??i?<=?12;??++i?)
??{
?????XT[i]?=3*X[i]*B[1][1]+3*Y[i]*B[2][1]+3*Z[i]*B[3][1]+C[i]*B[4][1];
?????YT[i]?=3*X[i]*B[1][2]+3*Y[i]*B[2][2]+3*Z[i]*B[3][2]+C[i]*B[4][2];
?????ZT[i]?=3*X[i]*B[1][3]+3*Y[i]*B[2][3]+3*Z[i]*B[3][3]+C[i]*B[4][3];
??}
}
//?此函數(shù)求軸測(cè)投影后點(diǎn)的坐標(biāo)值
void???CbaseClass::MCalculate(array2d?B)
{
??ReadWorkpiece();
??for?(?int?i?=?1;??i?<=?12;??++i?)
??????{
?????XT[i]?=3*X[i]*B[1][1]+3*Z[i]*B[2][1]+3*Y[i]*B[3][1]+C[i]*B[4][1];
?????YT[i]?=3*X[i]*B[1][2]+3*Z[i]*B[2][2]+3*Y[i]*B[3][2]+C[i]*B[4][2];
?????ZT[i]?=3*X[i]*B[1][3]+3*Z[i]*B[2][3]+3*Y[i]*B[3][3]+C[i]*B[4][3];
??????}?
??//?三個(gè)坐標(biāo)計(jì)算公式由點(diǎn)的齊次坐標(biāo)乘以軸測(cè)投影變換矩陣得來(lái)。
}
void???CbaseClass::XCalculate(array2d?B)
{int?i;
??Read();
??for?(i?=?1;i<9;i++?)
??{
?????ax[i]?=XP[i]*B[1][1]+YP[i]*B[2][1]+ZP[i]*B[3][1]+CP[i]*B[4][1];
?????ay[i]?=XP[i]*B[1][2]+YP[i]*B[2][2]+ZP[i]*B[3][2]+CP[i]*B[4][2];
?????az[i]?=XP[i]*B[1][3]+YP[i]*B[2][3]+ZP[i]*B[3][3]+CP[i]*B[4][3];
??}
}
void?CbaseClass::Display()
{
CframeWnd*?pWnd=(CframeWnd*)AfxGetApp()->m_pMainWnd;
CDC*?pdc=pWnd->GetActiveView()->GetDC();
CRect?rr;
::GetClientRect(pWnd->GetActiveView()->m_hWndrr);
DrawText()
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件?????151620??2006-07-04?01:36??三維變換.exe
?????文件??????54784??2006-07-04?02:09??Grphics?experiment?NO5--三維圖形的投影變換.doc
?????文件??????11017??2004-12-16?10:36??三維變換\ba
?????文件???????1875??2004-12-16?10:20??三維變換\ba
?????文件??????????0??2004-08-14?14:59??三維變換\Cba
????...D..R?????????0??2006-07-05?19:43??三維變換\Debug
?????文件???????2509??2004-08-14?13:06??三維變換\MainFrm.cpp
?????文件???????1581??2004-08-14?13:06??三維變換\MainFrm.h
?????文件???????4317??2004-08-14?13:06??三維變換\ReadMe.txt
?????文件???????1078??2004-08-14?13:06??三維變換\res\Toolbar.bmp
?????文件???????1078??2004-08-14?13:06??三維變換\res\三維變換.ico
?????文件????????400??2004-08-14?13:06??三維變換\res\三維變換.rc2
?????文件???????1078??2004-08-14?13:06??三維變換\res\三維變換Doc.ico
????...D..R?????????0??2006-07-03?13:03??三維變換\res
?????文件???????2000??2006-07-03?12:54??三維變換\resource.h
?????文件????????210??2004-08-14?13:06??三維變換\StdAfx.cpp
?????文件???????1054??2004-08-14?13:06??三維變換\StdAfx.h
?????文件???????1163??2006-07-03?12:52??三維變換\TRANSLATION_DLG.cpp
?????文件???????1312??2006-07-03?12:52??三維變換\TRANSLATION_DLG.h
?????文件??????46704??2006-07-04?02:08??三維變換\三維變換.aps
?????文件???????3220??2006-07-04?02:25??三維變換\三維變換.clw
?????文件???????4161??2004-08-14?13:06??三維變換\三維變換.cpp
?????文件???????4886??2006-07-03?13:03??三維變換\三維變換.dsp
?????文件????????541??2004-08-14?13:06??三維變換\三維變換.dsw
?????文件?????151620??2006-07-04?01:36??三維變換\三維變換.exe
?????文件???????1324??2004-08-14?13:06??三維變換\三維變換.h
?????文件?????205824??2006-07-04?02:25??三維變換\三維變換.ncb
?????文件??????87040??2006-07-04?02:25??三維變換\三維變換.opt
?????文件????????797??2006-07-04?02:25??三維變換\三維變換.plg
?????文件??????13926??2006-07-04?02:08??三維變換\三維變換.rc
............此處省略8個(gè)文件信息
評(píng)論
共有 條評(píng)論