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);
}