|
// pruebabressenham.cpp : Defines the entry point for the console application.
#include "stdafx.h"
//#include "stdio.h"
#include "string.h"
#include "iostream.h"
char *mask;
void puntos_circulo(int x, int y, int valor,float radio)
{
//coordenada del centro
//(radio*2+1)*(radio+1-y) - ( (radio-x) )
//x,y
mask[int( (radio*2+1)*(radio+1-y) - (radio-x) )-1]=valor;
//y,x
mask[int( (radio*2+1)*(radio+1-x) - (radio-y) )-1]=valor;
//-x,y
mask[int( (radio*2+1)*(radio+1-y) - (radio+x) )-1]=valor;
//-y,x
mask[int( (radio*2+1)*(radio+1-x) - (radio+y) )-1]=valor;
//x,-y
mask[int( (radio*2+1)*(radio+1+y) - (radio-x) )-1]=valor;
//y,-x
mask[int( (radio*2+1)*(radio+1+x) - (radio-y) )-1]=valor;
//-x,-y
mask[int( (radio*2+1)*(radio+1+y) - (radio+x) )-1]=valor;
//-y,-x
mask[int( (radio*2+1)*(radio+1+x) - (radio+y) )-1]=valor;
}
void CircunferenciaBressenham(float radio)
{
//algoritmo de bressenham para circulos
int x,y,e;
x=radio;
y=0;
e=0;
while(y<x)
{
puntos_circulo(x,y,1,radio);
e = e+2*y+1;
y = y + 1;
if ((2*e)>(2*x-1))
{
x= x-1;
e=e-2*x+1;
}
}
}
void CircunferenciaPuntoMedio(float radio)
{
//algoritmo de punto medio para circulos
int x,y,d,delta_E, delta_SE;
x=0;
y=radio;
d=1-int(radio);
delta_E=3;
delta_SE=5-(int(radio)*2);
puntos_circulo(x,y,1,radio);
while (y > x)
{
if(d<0){
d+=delta_E;
delta_E +=2;
delta_SE+=2;
x++;
}else{
d+=delta_SE;
delta_E+=2;
delta_SE+=4;
x++;
y--;
}
}
puntos_circulo(x,y,1,radio);
}
void RellenarCircunferencia(float radio)
{
int i;
bool sw=false;
for (i=0 ; i <(radio*2+1)*(radio*2+1) ; i++)
{
mask[i] = '1';
}
}
void MascaraCircular (float radio, char *Mascara)
{//pre Radio > 0
//reservo espacio para la mascara
mask= new char[int((radio*2+1) * (radio*2+1))];
//inicializo en 0 la mascara
int i,j;
for (i=0 ; i <radio*2+1 ; i++)
{
for (j=0 ; j <radio*2+1 ; j++)
{
mask[int(j*(radio*2+1)+i)] = '0';
}
}
mask[int( (radio*2+1)*(radio+1-0) - (radio-0) )-1]=1;
// CircunferenciaPuntoMedio(radio);
CircunferenciaBressenham(radio);
memcpy(Mascara,mask,((radio*2+1)*(radio*2+1)));
}
int main(int argc, char* argv[])
{
char *Mayatona;
float L ;
cin>>L;
int i, j;
MascaraCircular (L, Mayatona);
// mask = new char [(L*2+1)*(L*2+1)];
for (i=0 ; i <L*2+1 ; i++)
{
for (j=0 ; j <L*2+1 ; j++)
{
if (Mayatona[int(j*(L*2+1)+i)] == 1)
{
printf ("XX");
}
else
{
printf ("__");
}
}
printf("\n");
}
//delete Mayatona;
return 0;
}
|