//*********************************
//绘制坐标系以及初始立方体
//*********************************
void CTransGraphicsView::OnDraw(CDC* pDC)
{
CTransGraphicsDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
HBRUSH hbrush;
CPen pen;
HPEN hPen;
// TODO: add draw code for native data here
pen.CreatePen(PS_SOLID,3,RGB(255,0,0));
hPen=(HPEN)pDC->SelectObject(pen);
pDC->SetViewportOrg(cxClient/2,cyClient/2);
pDC->MoveTo(-cxClient/2,0);
pDC->LineTo(cxClient/2,0);
pDC->MoveTo(0,-cyClient/2);
pDC->LineTo(0,cyClient/2);
pen.DeleteObject();
pDC->SelectObject(hPen);
this->ShadowTrans(-45);
for(int i=0;i<4;i++)
{
pDC->MoveTo(cpoints[i]);
pDC->LineTo(cpoints[i+4]);
}
hbrush = (HBRUSH)pDC->SelectObject(GetStockObject(NULL_BRUSH)) ;
pDC->Polygon(cpoints,4);
pDC->Polygon(cpoints+4,4);
}
//********************
//矩阵的乘法
//*********************
void CTransGraphicsView::MutiTransMarix(double a[1][4],double b[4][4],double MutiResult[1][4])
{
for(int i=0;i<4;i++) MutiResult[0][i] = 0;
for(i=0; i<1;i++)
for(int j=0;j<4;j++)
for(int k=0;k<4;k++)
MutiResult[i][j] += a[i][k]*b[k][j];
}
//******************************
//将坐标转化为矩阵形式(向量)
//******************************
void CTransGraphicsView::TransPointToMarix(ThPoint &tp,double a[1][4])
{
a[0][0] = tp.x;
a[0][1] = tp.y;
a[0][2] = tp.z;
a[0][3] = 1;
}
//******************************
//将矩阵(向量)转化为三维坐标形式
//******************************
void CTransGraphicsView::TransMarixToPoint(double a[1][4],ThPoint &tp)
{
tp.x = a[0][0];
tp.y = a[0][1];
tp.z = a[0][2];
}
//******************************
//立方体的平移算法
//******************************
void CTransGraphicsView::MoveTrans(double x,double y,double z)
MFC下实现图形学之立方体平移、比例、旋转、投影变换算法
最新推荐文章于 2024-04-02 00:00:00 发布