Punto

Solo disponible en BuenasTareas
  • Páginas : 6 (1339 palabras )
  • Descarga(s) : 0
  • Publicado : 16 de septiembre de 2010
Leer documento completo
Vista previa del texto
puntoPUNTO .H:
#pragma once

class CPunto
{
public:
float x;
float y;
CPunto(void);
~CPunto(void);
CPunto(float a, float b);
};
PUNTO .CPP:
#include "StdAfx.h"
#include "Punto.h"

CPunto::CPunto(void)
{
x=0; y=0;
}

CPunto::~CPunto(void)
{
}
CPunto::CPunto(float a,float b)
{
x=a; y=b;
}
LINEA .H:
#pragma once
#include "Punto.h"
class CLinea
{
CPunto p1;CPunto p2;
public:
void SetInicio(float a,float b);
void SetFin(float a,float b);
void SetInicio(CPunto aux);

void Dibujar (CDC *dc);
void DibujarBRE(CDC*dc);
void DDA(float xi, float yi, float xf, float yf, CDC *dc);
void bresenham(float Xo,float Yo,float Xf,float Yf,CDC *dc);
CLinea(void);
~CLinea(void);


};
LINEA .CPP:
#include "StdAfx.h"
#include "Linea.h"CLinea::CLinea(void)
{
p1=CPunto(700,500);
p2=CPunto(500,300);
}

CLinea::~CLinea(void)
{
}
void CLinea::SetInicio(float a, float b)
{
p1.x=a; p1.y=b;
}
void CLinea::SetFin(float a, float b)
{
p2.x=a; p2.y=b;
}
void CLinea::Dibujar(CDC *dc)
{
DDA(p1.x,p1.y,p2.x,p2.y,dc);
}
void CLinea::DibujarBRE(CDC *dc)
{
bresenham(p1.x,p1.y,p2.x,p2.y,dc);
}
voidCLinea::DDA(float xi, float yi, float xf, float yf, CDC *dc)
{
float x=xi,y=yi,incx,incy,dx,dy,pasos;
int i;
dx=xf-xi;
dy=yf-yi;
if(abs(dx)>abs(dy))
pasos=(float)abs(dx);
else
pasos=(float)abs(dy);

incx=dx/(float)pasos;
incy=dy/(float)pasos;

for(i=0;i<pasos;i++)
{
dc->SetPixel((int)(x+0.5),(int)(y+0.5),RGB(0,0,255));
x+=incx;y+=incy;

}
}

void CLinea::bresenham (float Xo, float Yo, float Xf, float Yf, CDC *dc)
{

double dx=Xf-Xo;
double dy=Yo-Yf;
double Dx=abs(dx);
double Dy=abs(dy);
double dx2=2*dx;
double dy2=2*Dy;
double dxy2=2*(dx-dy);
double dyx2=2*(Dy-Dx);
double m=dy/dx;
double x=0,y=0,p=0,xf=0,yf=0;
if(m>=0)//cuad 1 y 3 + eje X
{

if(dx>dy)//alg1 m=[0,1)
{

p=dy2-dx;if(dx>0)
{

x=Xo; y=Yo; xf=Xf;

}

else{
x=Xf; y=Yf; xf=Xo;

}

while(x<xf)
{

dc->SetPixel(x,y,RGB(20,220,200));

x++;

if(p<0)
{

p+=dy2;

}

else{
p+=dyx2;

y--;

}

}

}

else{//alg2 m=[1,inf)
p=dx2-dy;

if(dy<0)
{

x=Xo; y=Yo; yf=Yf;

}

else{
x=Xf; y=Yf; yf=Yo;

}

while(y<yf)
{

dc->SetPixel(x,y,RGB(20,220,200));

y++;if(p>0)
p+=dx2;

else{
p+=dxy2;

x--;

}

}

}

}

else{ //cuad 2 y 4 + eje Y
if(dx>=dy)//alg3 m=[-1,0)
{

p=dy2-dx;

if(dx>0)
{

x=Xo; y=Yo; xf=Xf;

}

else{
x=Xf; y=Yf; xf=Xo;

}

while(x<xf)
{

dc->SetPixel(x,y,RGB(20,220,200));

x++;

if(p<0)
{

p+=dy2;

}

else{
p+=dyx2;

y++;

}

}

}

else{//alg4 m=[-inf,-1)p=dx2-dy;

if(dy<0)
{

x=Xo; y=Yo; yf=Yf;

}

else{
x=Xf; y=Yf; yf=Yo;

}

while(y<yf)
{

dc->SetPixel(x,y,RGB(20,220,200));

y++;

if(p>0)
p+=dx2;

else{
p+=dxy2;

x++;

}

}

}

}

}

CIRCULO .H:

#pragma once
#include"Punto.h"

class CCirculo
{
CPunto p1;
CPunto p2;
public:
void SetInicio(float a, float b);
void SetFin(float a, floatb);
void SetInicio(CPunto aux){
p1=aux;
}//forma inline
void SetFin(CPunto aux){
p2=aux;
}
void Dibujar(CDC *dc);
void dibujarCAR(CDC*dc);
void dibujarBRE(CDC*dc);
void Cartesiano(float Xo, float Yo, float Xf, float Yf, CDC *dc);
void Polar(float Xo, float Yo, float Xf, float Yf, CDC *dc);
void cirbresenham(int Xo, int Yo, int Xf, int Yf, CDC *dc);
void cirpunto (int Xc,int Yc,int x,int y, CDC *dc);
void Dibujarelip(CDC *dc);
int distancia(int Xo,int Yo,int Xf,int Yf);
CCirculo(void);
~CCirculo(void);
};

CIRCULO .CPP:

#include "StdAfx.h"
#include "Circulo.h"

#include <math.h>

CCirculo::CCirculo(void)
{
p1=CPunto(10,10);
p2=CPunto(500,300);
}

CCirculo::~CCirculo(void)
{
}
void CCirculo::SetInicio(float a, float b)
{
p1.x=a; p1.y=b;
}...
tracking img