Cómo dibujar 1 círculo con c++???

Estado
Cerrado para nuevas respuestas

bisbal_83

Nuevo Miembro
Miembro
Hola programadores!

Hace tiempo que no toco el C++ y he olvidado bastante, la verdad. Tengo que hacer algo sencillo pero no sé cómo empezar ni qué utilizar.

Tengo un archivo .XML:

Insertar CODE, HTML o PHP:
<DISPLAY>

- <FORM NAME="circle">

- <CENTER>

  <XPOS>100</XPOS>

  <YPOS>100</YPOS>

  </CENTER>

  <RADIUS>70</RADIUS>

  <COLOR>blue</COLOR>

  </FORM>

- <FORM NAME="circle">

- <CENTER>

  <XPOS>240</XPOS>

  <YPOS>90</YPOS>

  </CENTER>

  <RADIUS>180</RADIUS>

  <COLOR>red</COLOR>

  </FORM>

- <FORM NAME="circle">

- <CENTER>

  <XPOS>300</XPOS>

  <YPOS>300</YPOS>

  </CENTER>

  <RADIUS>20</RADIUS>

  <COLOR>black</COLOR>

  </FORM>

  </DISPLAY>
Mi única tarea es acceder a los datos, y dibujar 3 círculos. No sé qué utilizar ni cómo. Ando perdido.

Si alguien sabe plotear los círculos pero no sabe acceder a los datos .XML me da igual. Lo importante es el gráfico.

MUCHAS GRACIAS !! :D
 

ZeroFinished

Miembro
Miembro
Perdona, pero, este no es el foro de programacíón? corrígeme si me equivoco.
jejejejeje. pues creo que si colega.

Te has paseado por el guruprogramador?... Bueno, si no lo has hecho puede que este tutorial te sirva mientras esperas una respuesta más contundente.

Zona c/c++: Como crear círculos
Descripcion
Utilizacion de las funciones virtuales puras para crear un circulo, rectangulo y triangulo, y estas figuras se moveran en pantalla por medio de las flechas del teclado, dicho movimiento no tendra que salirse de los limites de pantalla y ademas se crearan los objetos de forma dinamica.

Procedimiento

QUE SON LAS FUNCIONES VIRTULES PURAS?

Son todas aquellas funciones virtuales cuyo codigo es nulo, y ademas este tipo de funciones virtuales se utilizan con clases abstractas.

PASOS

Lo primero que haremos sera crear la clase principal, que apartir de la cual se crearan las figuras:

/*se incluye las librerias*/

#include<iostream.h>
#include<ctype.h>
#include <conio.h>
#include <stdio.h>
#include <graphics.h>

#define ESC '\x1b'

void inicializa() /* se inicializa el modo grafico*/
{
int gd, gm;
gd=DETECT, gm;
initgraph(&gd,&gm,"c:\\tc\\bgi");
}

class figuras /* esta es la clase, apartir de esta se crearan las figuras*/
{
protected:
int color;
public:
virtual void dibujar()=0; /* esta es la funcion virtual pura que se encargara de dibujar las figuras, como vemos esta con codigo nulo*/
virtual void mover(int xx, int yy)=0; /*esta es la funcion virtual pura que movera a las figuras */
};

Ahora comenzaremos la creacion de la primera figura, que es el circulo:

Primero craremos la clase del circulo, la cual heredara a la clase principal figuras, para poder utilizar las funciones virtuales que contiene la clase figuras:
Insertar CODE, HTML o PHP:
class circulo:public figuras
{
public:
int x,y,radio;
void inicializa(int, int, int);
void dibujar(); /*aqui ya se inicializa esta funcion, que es heredada de la clase figuras*/
void mover(int xx, int yy); /*aqui tambien ya se inicializa esta funcion*/
};
Cabe hacer notar que en las clase figuras las funciones virtuales se igualaban a 0, para que su contenido sea nulo, asi por ejemplo no es lo mismo void dibjar()=0; y void dibujar();

Hacemos lo mismo para las clases de las figuras del rectangulo y triangulo:

Insertar CODE, HTML o PHP:
class rectangulo:public figuras
{
public:
int x, y, b, h;
void inicializa(int, int, int, int);
void dibujar();
void mover(int xx, int yy);
};

class triangulo:public figuras
{
public:
int x, y, b, h;
void inicializa(int, int, int, int);
void dibujar();
void mover(int xx, int yy);
};
Nuestro siguiente paso es el de inicializar los valores de las coordenadas, radio,color, etc.. , en todas nuestras figuras:

Insertar CODE, HTML o PHP:
void circulo::inicializa(int xx, int yy, int r)
{
x=xx;  /*posicion inicial  en x*/
y=yy;  /*posicion inicial  en y*/
radio=r; /*radio del circulo*/
color=9; /*color del circulo*/
}

void rectangulo::inicializa(int xx, int yy, int bb, int hh)
{
x=xx; /*posicion inicial  en x*/
y=yy; /*posicion inicial  en y*/
b=bb; /*base del rectangulo*/
h=hh;  /*altura del rectangulo*/
color=14; /*color del rectangulo*/
}

void triangulo::inicializa(int xx, int yy, int bb, int hh)
{
setcolor(14);
x=xx; /*posicion inicial  en x*/
y=yy;  /*posicion inicial  en y*/
b=bb;  /*base del triangulo*/
h=hh;  /*altura del triangulo*/
color=14; /*color del triangulo*/
}
Ahora sigue dibujar las figuras, mediante la funcion heredada dibujar :

Tanto para el circulo como para el rectangulo, estas funciones seran extremadamente sencillas, pues c++, nos proporciona las respectivas funciones para dibujarlas: fillellipse(); y bar().

Pero para dibujar el triangulo se dificulta un poco, porque no tenemos una funcion que nos permita dibujar directamente un triangulo, para ello tendremos que usar las instrucciones de poligonos: int poly[n];
Insertar CODE, HTML o PHP:
void circulo::dibujar()
{
setcolor(BLACK);
setbkcolor(BLACK);
setfillstyle(2,15);
fillellipse(x,y,radio,radio); /*dibujar el circulo*/
}

void rectangulo::dibujar()
{
setcolor(BLACK);
setbkcolor(BLACK);
setfillstyle(7, 14);
bar(x,y, x+b, y+h); /*dibujar el rectangulo*/
}

void trian(int x1,int y1,int x2,int y2,int x3,int y3,int relleno,int color)
{
setcolor(BLACK);
int poly[6]; 
poly[0]=x1; /*representa el primer punto del triangulo, y asi sucesivamente hasta poly[5]*/
poly[1]=y1;
poly[2]=x2;
poly[3]=y2;
poly[4]=x3;
poly[5]=y3;
setfillstyle(4,color);
fillpoly(3,poly);
}

void triangulo::dibujar()
{
setcolor(BLACK);
setbkcolor(BLACK);
trian(x,y,x+b/2,y+h,x-b/2,y+h,1,3); /*dibujamos el triangulo*/
}
Nuestro siguiente paso, sera codificar las instrucciones que nos permitan dar movimiento a nuestras figuras, aun no utilizaremos las flechas, solo son las instrucciones de movimiento:
Insertar CODE, HTML o PHP:
void circulo::mover(int xx, int yy)
{
setcolor(BLACK);
setfillstyle(1,BLACK);/*instruccion para borrar la figura de su posicion antigua*/
fillellipse(x, y, radio, radio);
x=xx;
y=yy;
dibujar(); /*dibujar la figura en su posicion actual*/
}

void rectangulo::mover(int xx, int yy)
{
setcolor(BLACK);
setfillstyle(1,BLACK);
bar(x, y, x+b, y+h);
x=xx;
y=yy;
dibujar();
}

void triangulo::mover(int xx, int yy)
{
setcolor(BLACK);
setfillstyle(1,BLACK);
trian(x,y,x+b/2,y+h,x-b/2,y+h,1,BLACK);
x=xx;
y=yy;
dibujar();
}
Creamos nuestro menu, para poder seleccionar entre las tres figuras:
Insertar CODE, HTML o PHP:
void menu()
{
inicializa();
clearviewport();
setbkcolor(BLACK);
setcolor(14);
outtextxy(220,100," PRACTICA DE FIGURAS ");
setcolor(3);
outtextxy(250,150," [1] C¡rculo");
setcolor(9);
outtextxy(250,200," [2] Rect ngulo");
setcolor(3);
outtextxy(250,250," [3] Tri ngulo");
setcolor(9);
outtextxy(250,300," [4] Salir");
for(int s=0;s<650;s++)
{
outtextxy(s,80,"+");
outtextxy(s,320,"+");
}

for(int w=0;w<460;w++)
{
outtextxy(100,w,"+");
outtextxy(500,w,"+");
}

}
Ahora nos queda un ultimo paso, crear el codigo que nos permita seleccionar entre las tres figuras, mover la figura, pedir al usuario los datos como por ejemplo el valor del radio del circulo, etc..

Veamos como queda ese código:
Insertar CODE, HTML o PHP:
void main(void)
{
int x, y, radio, b, h;
char tecla,opcion;
clrscr();
do{
menu(); /*imprimimos el menu*/
opcion=getch();
switch (opcion)

{
case'1':
clearviewport();
setcolor(11);
outtextxy(250,100,"C I R C U L O");
gotoxy(26,11);cout<<"Radio: ";cin>>radio; /*pedimos el radio del circulo*/
circulo*circ; /*creacion del objeto circ de forma dinamica lo mismo se hace en las otras figuras*/
circ=new circulo;
inicializa();
circ->inicializa(radio, radio, radio);
circ->dibujar();
do{
tecla=getch();
switch(tecla)
{
case 0:
tecla =getch();
switch(tecla)
{

/*aqui inician las comparaciones para saber que flecha se presiono, y para  ver que le circulo no abandone los limites de la pantalla esto se hace en cada figura/*
case '\x4D':
if(circ->x<640-(radio*2))circ->mover(circ->x+10,circ->y);
break;
case '\x4B':
if(circ->x>radio)circ->mover(circ->x-10,circ->y);
break;
case '\x48':
if(circ->y>radio)circ->mover(circ->x,circ->y-10);
break;
case '\x50':
if(circ->y<480-(radio*2)) circ->mover(circ->x,circ->y+10);
break;
} break;
}
}while(tecla!='\xd');
break;

case '2':

clearviewport();
setcolor(14);
outtextxy(250,100,"R E C T A N G U L O");
gotoxy(26,11);cout<<"Base : ";cin>>b;
gotoxy(26,13);cout<<"Altura: "; cin>>h;
rectangulo*rect;
rect=new rectangulo;
inicializa();
rect->inicializa(0, 0, b, h);
rect->dibujar();
do{
tecla=getch();
switch(tecla)
{ case 0:
tecla =getch();
switch(tecla)
{
case '\x4D':
if(rect->x<640-b)rect->mover(rect->x+10,rect->y);
break;
case '\x4B':
if(rect->x>0)rect->mover(rect->x-10,rect->y);
break;
case '\x48':
if(rect->y>0)rect->mover(rect->x,rect->y-10);
break;
case '\x50':
if(rect->y<480-h)rect->mover(rect->x,rect->y+10);
break;
} break;
}
}while(tecla!='\xd');
break;

case '3':
clearviewport();
setcolor(14);
outtextxy(250,100,"T R I A N G U L O");
gotoxy(26,11); cout<<"Base: ";cin>>b;
gotoxy(26,13); cout<<"Altura: "; cin>>h;
triangulo*tri;
tri=new triangulo;
inicializa();
tri->inicializa(b/2, 0, b, h);
tri->dibujar();
do{
tecla=getch();
switch(tecla)
{
case 0:
tecla =getch();
switch(tecla)
{
case '\x4D':
if(tri->x<640-b)tri->mover(tri->x+10,tri->y);
break;
case '\x4B':
if(tri->x>b/2)tri->mover(tri->x-10,tri->y);
break;
case '\x48':
if(tri->y>0)tri->mover(tri->x,tri->y-10);
break;
case '\x50':
if(tri->y<480-h)tri->mover(tri->x,tri->y+10);
break;
}break;
}
}while(tecla!='\xd');
closegraph();
break;

case '4':
opcion=ESC;
break;
}
}while (opcion!=ESC);
}
Bueno aqui termina este articulo.
Suerte.
 

rob1104

Super Moderador
Super Moderador
Perdona, pero, este no es el foro de programacíón? corrígeme si me equivoco.
Asi es compañero bisbal_83, lo que pasa es que lo habías posteado en el foro de diseño grafico y la mdoeradora alhanna hizo el favor de trasladarlo aquí a programacion :oops:

Saludos
 

bisbal_83

Nuevo Miembro
Miembro
Hola, he probado lo que me dio Zerfofinished pero...me da errores. Me he descargado el graphics.h y lo he colocado en la carpeta de includes de Visual. Al ejecutar el código:

1- No reconoce las funciones clrscr() ni gotoxy(). Las quito para probar el resto y no hay más errores de compilación pero al ejecutar...

2- No resuelve símbolos externos(errores de linkado).

Insertar CODE, HTML o PHP:
ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _initgraph

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setcolor

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fillellipse

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setfillstyle

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setbkcolor

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _bar

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fillpoly

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _outtextxy

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _clearviewport

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _closegraph

Debug/ipa.exe : fatal error LNK1120: 10 unaufgeloeste externe Verweise

Fehler beim Ausführen von link.exe.
Tengo 10 errores, uno de cada función que se encuentra en el graphics.h ... No sé, para guardar graphics.h lo encontré en código, abri el notepad, lo pegué y guardé como graphics.h, no creo que sea por eso, no? Puede ser debido al compilador o algo?

Tengo el programa VC++ 6.0 ...

NECESITO AYUDA; ES UNA PRUEBA PARA OBTENER UNAS PRACTICAS EN UNA EMPRESA !!! GRACIAS!!!!
 

RadicalEd

Ex-Mod
Miembro
bisbal_83 dijo:
1- No reconoce las funciones clrscr() ni gotoxy(). Las quito para probar el resto y no hay más errores de compilación pero al ejecutar...

2- No resuelve símbolos externos(errores de linkado).

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _initgraph

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setcolor

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fillellipse

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setfillstyle

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setbkcolor

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _bar

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fillpoly

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _outtextxy

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _clearviewport

ipa.obj : error LNK2001: Nichtaufgeloestes externes Symbol _closegraph

Debug/ipa.exe : fatal error LNK1120: 10 unaufgeloeste externe Verweise

Fehler beim Ausführen von link.exe.

Tengo 10 errores, uno de cada función que se encuentra en el graphics.h ... No sé, para guardar graphics.h lo encontré en código, abri el notepad, lo pegué y guardé como graphics.h, no creo que sea por eso, no? Puede ser debido al compilador o algo?

Tengo el programa VC++ 6.0 ...

NECESITO AYUDA; ES UNA PRUEBA PARA OBTENER UNAS PRACTICAS EN UNA EMPRESA !!! GRACIAS!!!!
Lo que pasa es que estas usando una libreria de Borland y ellos manejan sus propias funciones en C, osea poco standars los ...., lo que te puedo decir es que no utilices funciones tales como clrscr, gotoxy, ni la libreria conio.h que en tú Visual C++ nunca la vas a encontrar, en esta máquina no tengo con que compilar, pero sin embargo le hechare una ojeadita para ver si puedo limpiar un poco el código
 

bisbal_83

Nuevo Miembro
Miembro
Mirad, he hecho esto, mu sencillo y rápido...

Insertar CODE, HTML o PHP:
/*libraries*/

#include<iostream.h>

#include<ctype.h>

#include <conio.h>

#include <stdio.h>

#include <graphics.h>

#define ESC '\x1b'

void inicializa() /* wir fangen die graphische  Methode an*/

{

int gd, gm;

gd=DETECT, gm;

initgraph(&gd,&gm,"c:\\tc\\bgi");

}

class figuras  /* Figuras Klasse*/

{

protected:

int color;

public:

virtual void dibujar()=0; /* Virtuell Funktion, noch mit Null Code*/

};

class circuloublic figuras

{

public:

int x,y,radio;

void inicializa1(int, int, int);

void inicializa2(int, int, int);

void inicializa3(int, int, int);

void dibujar(); /*Wir initialisieren die Funktion*/

};

void circulo::inicializa1(int xx, int yy, int r)

{

x=xx;  /*Ursprung x*/

y=yy;  /*Ursprung y*/

radio=r; /*Radio*/

color= BLUE; /*Farbe*/

}

void circulo::inicializa2(int xx, int yy, int r)

{

x=xx;  /*Ursprung x*/

y=yy;  /*Ursprung y*/

radio=r; /*Radio*/

color= RED; /*Farbe*/

}

void circulo::inicializa3(int xx, int yy, int r)

{

x=xx;  /*Ursprung x*/

y=yy;  /*Ursprung y*/

radio=r; /*Radio*/

color= BLACK; /*Farbe*/

}

void circulo::dibujar()

{

setcolor(BLUE);

setbkcolor(BLUE);

setfillstyle(2,15);

fillellipse(x,y,radio,radio); /*es zeichnt den Kreis*/

}

void main(void)

{

clearviewport();

setcolor(11);

outtextxy(250,100,"C I R C L E");

circulo *circ1;

circulo *circ2;

circulo *circ3; /*Dynamic*/

circ1=new circulo;

circ2=new circulo;

circ3=new circulo;

inicializa();

circ1->inicializa1(100, 100, 70);

circ1->dibujar();

circ2->inicializa2(240, 90, 180);

circ2->dibujar();

circ3->inicializa3(300, 300, 20);

circ3->dibujar();

getch();

}
PERO TENGO ESTOS ERRORES; NO SE XK!!!!!
Insertar CODE, HTML o PHP:
Linker-Vorgang läuft...

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _initgraph

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _fillellipse

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setfillstyle

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setbkcolor

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _setcolor

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _outtextxy

api2.obj : error LNK2001: Nichtaufgeloestes externes Symbol _clearviewport

Debug/api2.dll : fatal error LNK1120: 7 unaufgeloeste externe Verweise

Fehler beim Ausführen von link.exe.
 
Estado
Cerrado para nuevas respuestas
Arriba Pie