Punto
#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;
}...
Regístrate para leer el documento completo.