📄 rect3d.cpp
字号:
// Rect3D.cpp: implementation of the CRect3D class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GraphExp.h"
#include "Rect3D.h"
#include "math.h"
#include "GraphExpDoc.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
/*CCPicture2Doc* CRect3D::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CCPicture2Doc)));
return (CCPicture2Doc*)m_pDocument;
}*/
//////////////////////////////
CRect3D::CRect3D()
{
}
CRect3D::CRect3D(COLORREF color,CPoint PLeft,CPoint PRdown)
{
c_color=color;
pLeft=PLeft;
pRdown=PRdown;
n=4;
}
CRect3D::~CRect3D()
{
}
//设置长方体的数组中的值
void CRect3D::SetRect3d()
{
int x1=pLeft.x;
int y1=pLeft.y;
int x2=pRdown.x;
int y2=pRdown.y;
int nn=1;
double th;
int r=int(sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))/2);
int h=4*r/5;
///判断是向左还是向右画长方体////////////
if(x2<x1)
cx=x1-r;
else
cx=x1+r;
cy=y1-h;
////将长方体中各个顶点的坐标值放入数组////
for(th=0;th<=2*pi+0.1;th+=2*pi/n)
{
x=r*cos(th);y=h;z=r*sin(th);
ax[nn]=x; ay[nn]=y; az[nn]=z;
ax1[nn]=x; ay1[nn]=y; az1[nn]=z;
nn=nn+1;
}
nn=1;
///实现数组备份用于恢复长方体//////////
for(th=0;th<=2*pi+0.1;th+=2*pi/n)
{
x=r*cos(th);y=-h;z=r*sin(th);
bx[nn]=x; by[nn]=y; bz[nn]=z;
bx1[nn]=x; by1[nn]=y; bz1[nn]=z;
nn=nn+1;
}
}
///////////绕X轴旋转////////////////
void CRect3D::RoundX(double thx)
{
for(int i=0;i<=5;i++)
{
yw=by[i];
zw=bz[i];
y=yw*cos(thx)-zw*sin(thx);
z=yw*sin(thx)+zw*cos(thx);
by[i]=y; bz[i]=z;
yw=ay[i];
zw=az[i];
y=yw*cos(thx)-zw*sin(thx);
z=yw*sin(thx)+zw*cos(thx);
ay[i]=y; az[i]=z;
}
}
///////////绕Y轴旋转////////////////
void CRect3D::RoundY(double thy)
{
for(int i=0;i<=5;i++)
{
zw=bz[i];
xw=bx[i];
x=zw*cos(thy)-xw*sin(thy);
z=zw*sin(thy)+xw*cos(thy);
bz[i]=z; bx[i]=x;
zw=az[i];
xw=ax[i];
x=zw*cos(thy)-xw*sin(thy);
z=zw*sin(thy)+xw*cos(thy);
az[i]=z; ax[i]=x;
}
}
///////////绕Z轴旋转////////////////
void CRect3D::RoundZ(double thz)
{
for(int i=0;i<=5;i++)
{
xw=bx[i];
yw=by[i];
x=xw*cos(thz)-yw*sin(thz);
y=xw*sin(thz)+yw*cos(thz);
bx[i]=x; by[i]=y;
xw=ax[i];
yw=ay[i];
x=xw*cos(thz)-yw*sin(thz);
y=xw*sin(thz)+yw*cos(thz);
ax[i]=x; ay[i]=y;
}
}
////沿X轴平移////////
void CRect3D::MoveX(int x)
{
for(int i=0;i<=5;i++)
{
ax[i]=ax[i]-x;
bx[i]=bx[i]-x;
}
}
////沿Y轴平移////////
void CRect3D::MoveY(int y)
{
for(int i=0;i<=5;i++)
{
ay[i]=ay[i]-y;
by[i]=by[i]-y;
}
}
////沿Z轴平移////////
void CRect3D::MoveZ(int z)
{
for(int i=0;i<=5;i++)
{
az[i]=az[i]+z;
bz[i]=bz[i]+z;
}
}
/////////////长方体图形的恢复////////
void CRect3D::Reset3D()
{
for(int i=0;i<=6;i++)
{
ax[i]=ax1[i];
ay[i]=ay1[i];
az[i]=az1[i];
bx[i]=bx1[i];
by[i]=by1[i];
bz[i]=bz1[i];
}
}
//////////画出长方体图形//////////////////
void CRect3D::DrawRect3d(CDC*pDC)
{
// CCPicture2Doc* pDoc = GetDocument();
// CPen Newpen1(PS_SOLID,1,c_color);
// CPen *pOldPen1=pDC->SelectObject(&Newpen1);
for(int nn=1;nn<=n;nn++)
{
x=bx[nn+1]; y=by[nn+1];
gx=int(cx+x);
gy=int(cy+y);
pDC->MoveTo(gx,gy);
x=bx[nn]; y=by[nn];
gx=int(cx+x);
gy=int(cy+y);
pDC->LineTo(gx,gy);
x=ax[nn];
y=ay[nn];
gx=int(cx+x);
gy=int(cy+y);
pDC->LineTo(gx,gy);
x=ax[nn+1];
y=ay[nn+1];
gx=int(cx+x);
gy=int(cy+y);
pDC->LineTo(gx,gy);
}
// pDC->SelectObject(pOldPen1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -