⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rect3d.cpp

📁 实现了区域填充已经其他画线功能
💻 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 + -