1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127 | /*
-Victor de la Rocha
-Algoritmia@groups.msn.com
-www.myalgorithm.com
-Miercoles 16 de Marzo del 2005 10:30am-Programa 2, Practica Graficos (Turbo C) "graphics.h"
-Programa dibuja un circulo, y 7 circulos sobre la primera circunferencia
dando vueltas
*/
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <graphics.h> //funciones graficas
#include <math.h> //funciones matematicas#include <dos.h> //Contiene la funcion delay
void main(){
/*
Las variables gdriver y gmodo, son las variables que se utilizan
para hacer referencia a que dispositivo y modo de video se utilizara, Se puede asÃÂÂgnar gdriver=0 o a DETECT para que este elija automaticamente
una configuracion adecuada
*/
int driver, modo;
int circulo[100]; int i,circulos;//contadores
int aux1;//variable auxiliar para simular el giro de los circulos
char aux2[3];//auxiliar para el numero de cada circulo
int centrox,centroy,radiog;//circulo principal
int radiop;//radio de los riculos pequeños /*
Se les asignara la posicion de cada vertice de los circulos pequeños
*/
int verticesx[100],verticesy[100];
double alfa;//2 veces PI entre el numero de vertices //--------------------------
/* Variable que controla la cantidad de circulos que iran dando vueltas
al rededor del circulo mayor. */
printf("Cantidad de circulos dando vueltas = ");scanf("%d",&circulos);
/* Centro del circulo mayor */ centrox=320;//x
centroy=240;//y
radiog=100;//Radio del circulo mayor
radiop=15;//Radio de los circulos pequeños
//-------------------------- for (i=0;i<=circulos-1;i++){
circulo[i]=i+1;
}
/*
gdriver=0 o DETECT Esto hace que se seleccione un dispositivo y un modo apropiado de video, hace la llamada a la funcion
detectgraph()
*/
driver=DETECT;
/* Una vez teniendo el timop de gdriver, se inicializa el modo de video
grafico
*/
initgraph(&driver,&modo,"C:\TCLITE\BGI");
/* Dibujamos el circulo grande con centro en (320 x,240 y) y con un radio
de 200
*/
circle(centrox,centroy,radiog);
/* algoritmo para obtener la posicion de los circulos en el plano de manera
que queden en una misma distancia todos, tomando en cuenta que es un heptagono
1. Crear una lista de 7 vértices: vértices
2. alfa <- 2*PI / 7
3. Bucle: i <- 0 hasta 6 4. vértices[i].x <- centro.x + radio * cos( i*alfa )
5. vértices[i].y <- centro.y + radio * sen( i*alfa )
*/
alfa=(2*3.141586)/circulos;
for (i=0;i<=circulos-1;i++){ verticesx[i]=abs(centrox+radiog*cos(i*alfa));
verticesy[i]=abs(centroy+radiog*sin(i*alfa));
}
/*
circulo[0]=1 circulo[1]=2
circulo[2]=3
circulo[3]=4
circulo[4]=5
circulo[5]=6 circulo[6]=7
.
.
circulo[x]=x+1
*/ do{
for(i=circulos-1;i>=0;i--){
setcolor(circulo[i]);//color del texto
setfillstyle(1,circulo[i]);//color de relleno del circulo
fillellipse(verticesx[i],verticesy[i],radiop,radiop); /*
Seteamos la salida del color en 16 (negro) para
fin de poder ver el numero que le pertenece a cada
circulo
*/ if(circulo[i]==16){//Si el color del circulo es negro
setcolor(15);//cambiamos por otro color el numero del circulo
}else{
setcolor(16);//si no seguimos con texto negro
} sprintf(aux2,"%d",circulo[i]);
outtextxy(verticesx[i]-3,verticesy[i]-3,aux2);
}
delay(500);//retardamos la ejecucion
/* Le damos el efecto de que estan girando los circulos
*/
aux1=circulo[circulos-1];
for (i=circulos-2;i>=0;i--){
circulo[i+1]=circulo[i]; }
circulo[0]=aux1;
}
/*
El programa mantiene su ejecucion mientras no sea tocada ninguna tecla !kbhit();
(Key Board Hit >> KBHit)
*/
while(!kbhit());
/* Cerramos el modo grafico */ closegraph();
}/* Fin del programa */ |