//---------------------------------------------------------------------------
#pragma hdrstop
#include <math.h>
#include "Graficos1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
void Graficos::linea(int x1,int y1,int x2,int y2,TColor color)
{
int dx,dy,steps,k,n,m;
float x_inc,y_inc,x,y;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
x_inc=(float)dx/steps;
y_inc=(float)dy/steps;
x=x1;
y=y1;
n=static_cast<int>(x);
m=static_cast<int>(y);
canvas->Pixels[n][m]=clBlue;
for(k=1;k<steps+1;k++)
{
x=x+x_inc;
y=y+y_inc;
n=static_cast<int>(x);
m=static_cast<int>(y);
canvas->Pixels[n][m]=clBlue;
}
}
//--------------------------------
void Graficos::linea(int x1,int y1,int x2,int y2)
{
int dx,dy,steps,k,n,m;
float x_inc,y_inc,x,y;
dx=x2-x1;
dy=y2-y1;
if(abs(dx)>abs(dy))
steps=abs(dx);
else
steps=abs(dy);
x_inc=(float)dx/steps;
y_inc=(float)dy/steps;
x=x1;
y=y1;
n=static_cast<int>(x);
m=static_cast<int>(y);
canvas->Pixels[n][m]=(TColor)random(255);//clBlue;
for(k=1;k<steps+1;k++)
{
x=x+x_inc;
y=y+y_inc;
n=static_cast<int>(x);
m=static_cast<int>(y);
canvas->Pixels[n][m]=(TColor)random(255);//clBlue;
}
}
void Graficos::circulo_1(int x1,int y1)
{
//int r=Edit3->Text.ToIntDef(50);
int xc=x1;
int yc=y1;
int x,y,r;
r=xc/2;
x=r;
for(int i=0;i<=r;i++)
{
y = yc + sqrt((r*r)-((x-xc)*(x-xc)));
x++;
canvas->Pixels[x][static_cast<int>(y)]=clBlue;
}
x=r;
//xc=100;
//yc=100;
for(int i=0;i<=r;i++)
{
y = yc - sqrt((r*r)-((x-xc)*(x-xc)));
x++;
canvas->Pixels[x][static_cast<int>(y)]=clBlue;
}
x=xc;
//xc=100;
//yc=100;
for(int i=0;i<=r;i++)
{
y = yc + sqrt((r*r)-((x-xc)*(x-xc)));
x++;
canvas->Pixels[x][static_cast<int>(y)]=clBlue;
}
x=xc;
//xc=100;
//yc=100;
for(int i=0;i<=r;i++)
{
y = yc - sqrt((r*r)-((x-xc)*(x-xc)));
x++;
canvas->Pixels[x][static_cast<int>(y)]=clBlue;
}
}
void Graficos::circulo_2(int x1,int y1,int r)
{
float dt,ct,st,x,y,xtemp;
dt=1.0/r;
x=0;
y=r;
ct=cos(dt);
st=sin(dt);
while(x<=y)
{
canvas->Pixels[static_cast<int>(x1+x)][static_cast<int>(y1+y)]=clBlue;
canvas->Pixels[static_cast<int>(x1-x)][static_cast<int>(y1+y)]=clRed;
canvas->Pixels[static_cast<int>(x1+x)][static_cast<int>(y1-y)]=clOlive;
canvas->Pixels[static_cast<int>(x1-x)][static_cast<int>(y1-y)]=clSkyBlue;
xtemp=x;
x=x*ct-y*st;
y=y*ct+xtemp*st;
}
}
void Graficos::circulo_3(int x1,int y1,int r)
{
float pi=M_PI*2.0;
float dth,ct,st,x,y,xtemp;
if(r!=0)
{
dth=pi/(16*r);
ct=cos(dth);
st=sin(dth);
x=0;
y=r;
for(int i=0;i<=(16*r);i++)
{
xtemp=x;
x=x*ct+y*st;
y=y*ct-xtemp*st;
canvas->Pixels[static_cast<int>(x1+x)][static_cast<int>(y1+y)]=clSkyBlue;
Sleep(30);
}
}
}
void Graficos::circulo_4(int x1,int y1,int r)
{
int x,y;
for(int grados=0;grados<360;grados++)
{
x=x1+r*cos(grados/180.0+M_PI);
y=y1+r*sin(grados/180.0+M_PI);
canvas->Pixels[x][y]=clBlue;
Sleep(10);
}
for(int grados=0;grados<360;grados++)
{
x=x1+r*cos(grados/90.0+M_PI);
y=y1+r*sin(grados/90.0+M_PI);
canvas->Pixels[x][y]=clBlue;
Sleep(10);
}
for(int grados=0;grados<360;grados++)
{
x=x1+r*cos(grados/M_PI);
y=y1+r*sin(grados/M_PI);
canvas->Pixels[x][y]=clBlue;
Sleep(10);
}
}
recibimos las coordenadas de el área donde quiere el usuario dibujar y con un botton hacemos el llamado al método de la clase gráficos.
los espirales los hacemos dibujando lineas del método linea como sigue:
int xc=Form1->PaintBox1->ClientWidth/2, yc=Form1->PaintBox1->ClientHeight/2,radio=5;
double pi=M_PI*2.0;
int count=0;
double dth,cth,sth,x,y,x_temp,xt,yt;
dth=pi/(16*radio);
cth=cos(dth);
sth=sin(dth);
x=0.0;
y=radio;
xt=xc+x;
yt=yc+y;
do
{
x_temp=x;
x=x*cth-y*sth;
y=y*cth+x_temp*sth;
if(x>0)
x +=0.5;
else
x-=0.5;
if(y>0)
y+=0.5;
else
y-=0.5;
//Form1->PaintBox1->Canvas->Pixels[floor(xt+0.5)][floor(yt+0.5)]=clRed;
/*x1=floor(xt+0.5);
y1=floor(yt+0.5);
x2=floor(xc+0.5);
y2=floor(yc+0.5);
g->linea(x1,y1,x2,y2);*/
xt=xc+x;
yt=yc+y;
count++;
Sleep(5);
}
while(count<=350);
Así quedo nuestra aplicación.
dibujando linea:
dibujando el circulo dado el centro de este
dibujando circulo con coordenadas del centro y radio
dibujando el circulo poco a poco:
dibujando el circulo calculando los ángulos:
dibujando espiral:
espiral 1:
espiral 2:
Agregando efectos a espiral:
Aquí puedes descargar