www.pudn.com > final_6.rar > Base.cpp


#include "StdAfx.h" 
#include "math.h" 
#include "base.h" 
 
  
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
CGPoint::CGPoint() 
{ 
   x=z=y=0;m=1; 
} 
CGPoint::CGPoint(double ox,double oy,double oz) 
{ 
   x=ox; 
   y=oy; 
   z=oz;m=1; 
} 
CGPoint::CGPoint(const CGPoint& CGPointSrc) 
{ 
   x=CGPointSrc.x; 
   y=CGPointSrc.y; 
   z=CGPointSrc.z;m=1; 
} 
CGPoint::~CGPoint() 
{} 
void CGPoint::Init(){ 
	x=y=z=0; 
} 
const CGPoint& CGPoint::operator=(const CGPoint&CGPointSrc) 
{ 
   x=CGPointSrc.x; 
   y=CGPointSrc.y; 
   z=CGPointSrc.z; 
   return *this; 
} 
void CGPoint::Set(double ox,double oy,double oz) 
{ 
   x=ox; 
   y=oy; 
   z=oz; 
} 
CGPoint operator+(const CGPoint& CGPoint1,const CGPoint& CGPoint2) 
{ 
   CGPoint p(CGPoint1.x+CGPoint2.x,CGPoint1.y+CGPoint2.y,CGPoint1.z+CGPoint2.z); 
   return p; 
} 
CGPoint operator-(const CGPoint& CGPoint1,const CGPoint& CGPoint2) 
{ 
    CGPoint p(CGPoint1.x-CGPoint2.x,CGPoint1.y-CGPoint2.y,CGPoint1.z-CGPoint2.z); 
   return p; 
} 
CGPoint operator*(const CGPoint& CGPointSrc,const double&scale) 
{ 
    CGPoint p(CGPointSrc.x*scale,CGPointSrc.y*scale,CGPointSrc.z*scale); 
	return p; 
} 
CGPoint operator*(const double&scale,const CGPoint& CGPointSrc) 
{ 
    CGPoint p(scale*CGPointSrc.x,scale*CGPointSrc.y,scale*CGPointSrc.z); 
    return p; 
} 
double CGPoint::Distance(CGPoint* pnt) 
{ 
    double dis; 
	dis=(x-pnt->x)*(x-pnt->x)+(y-pnt->y)*(y-pnt->y)+(z-pnt->z)*(z-pnt->z); 
	dis=sqrt(dis); 
		//(); 
	return dis; 
} 
//	BOOL IsSame(const CGPoint& pointSrc); 
//	BOOL IsInBox 
void CGPoint::Serialize(CArchive &ar) 
{ 
   if (ar.IsStoring()) 
	   ar<>x>>y>>z>>visual; 
} 
 
/*void CGPlane::Serialize(CArchive &ar) 
{ 
  if (ar.IsStoring 
}*/ 
 
IMPLEMENT_SERIAL(CGLight,CObject,0) 
 
CGLight::CGLight() 
{ 
   lc.r=255; 
   lc.g=255; 
   lc.b=255; 
   k=1; 
} 
 
CGLight::CGLight(double x,double y,double z) 
{ 
  position.x=x; 
  position.y=y; 
  position.z=z; 
  position.m=1; 
  lc.r=255;lc.g=255;lc.b=255; 
  k=1; 
} 
 
 
void CGLight::Serialize(CArchive &ar) 
{ 
  if (ar.IsStoring()) 
  { 
    ar<>lc.r>>lc.b>>lc.g>>k; 
  } 
   position.Serialize(ar); 
} 
 
void CGLight::DrawTop(CDC *pDC) 
{ 
    
	//CPen light(PS_DASH,2,RGB(255,100,100)); 
    //CPen *pOldPen=pDC->SelectObject(&light); 
	pDC->Ellipse(position.x-8,position.z-8,position.x+8,position.z+8); 
	//pDC->SelectObject(pOldPen); 
} 
 
void CGLight::DrawLeft(CDC *pDC) 
{ 
    //CPen light(PS_DASH,2,RGB(255,100,100)); 
   // CPen *pOldPen=pDC->SelectObject(&light); 
	pDC->Ellipse(-position.z-8,position.y-8,-position.z+8,position.y+8); 
  //	pDC->SelectObject(pOldPen); 
} 
 
void CGLight::DrawFront(CDC *pDC) 
{ 
    //CPen light(PS_DASH,2,RGB(255,100,100)); 
     // CPen *pOldPen=pDC->SelectObject(&light); 
	pDC->Ellipse(position.x-8,position.y-8,position.x+8,position.y+8); 
//	pDC->SelectObject(pOldPen); 
} 
 
void CGLight::DrawPer(CDC *pDC) 
{ 
   // CPen light(PS_DASH,2,RGB(255,100,100)); 
    //CPen *pOldPen=pDC->SelectObject(&light); 
	pDC->Ellipse(position.x-0.354*position.z-8,position.y+0.354*position.z-8,position.x-0.354*position.z+8,position.y+0.354*position.z+8); 
//	pDC->SelectObject(pOldPen);  
 
} 
 
void CGLight::GammaCorrect(double gammaR, double gammaG, double gammaB) 
{ 
  	double k=22.92;   
	//k依赖于具体CRT,这里我们取22。92 
	double dR=pow(lc.r/k,2.3); 
	double dG=pow(lc.g/k,2.3); 
	double dB=pow(lc.b/k,2.3); 
 
	gamma_lc.r=int(pow(dR,1/gammaR)*k); 
	gamma_lc.g=int(pow(dG,1/gammaG)*k); 
	gamma_lc.b=int(pow(dB,1/gammaB)*k); 
}