|
Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.
Mensajes - luchojimenez
1
« en: Sábado 30 de Junio de 2012, 02:38 »
/*El siguiente programa ha sido probado y testeado bajo MS-DOS*/ /*Programado en Borland C++ 5.0*/ /*Grafica el Fractal de Von Koch en forma recursiva.*/
#include <stdio.h> #include <conio.h> #include <graphics.h> #include <math.h> #define PI 3.14159
/************************Funciones*****************/
/*Dibuja una linea de longitud r y angulo angulo*/
void draw(double r,double angulo);
/*Simplemente arma el denominado copo de Koch */
void copoKoch(int orden, double r);
/*Grafica la curva de Von Koch en forma recursiva como es de esperarse*/
void koch(int orden,double r,double angulo);
/*Inicia el modo grafico*/
int iniModoGrafico(int *X_max, int *Y_max);
/****************************************************/ int main(void) {
int Xm,Ym; float lado; /*Longitud de cada lado de */ int orden; /*Indica el orden del fractal.Orden 0 es el caso Base*/
printf("Ingrese el orden: "); scanf("%d",&orden);
printf("Ingrese el lado: "); scanf("%f",&lado);
iniModoGrafico(&Xm,&Ym); moveto( ((Xm+1)/2)-(Xm+1)/4,((Ym+1) /2)+(Ym+1)/4);
copoKoch(orden,lado);
getch(); closegraph();
return 0;
}
/**************************/ void copoKoch(int orden, double r) { koch(orden,r,PI/3); koch(orden,r,-PI/3); koch(orden,r,PI);
} /**************************/ void draw(double r,double angulo) { linerel(r*cos(angulo), -r*sin (angulo));
} /*********************************/
int iniModoGrafico(int *X_max, int *Y_max) { int controlador = DETECT, modo, numerror;
initgraph(&controlador, &modo, "C:\\BC5\\BGI"); numerror = graphresult(); /*Si queres podes usar numerror*/
if (numerror != grOk) /* grOk vale 0 si no hay error */ return numerror;
*X_max = getmaxx(); *Y_max = getmaxy();
return 0; } /**************************/ void koch(int orden,double r,double angulo) { if(orden==0) draw(r,angulo);
else { koch(orden-1,r/3,angulo); koch(orden-1,r/3,angulo+(PI/3)); koch(orden-1,r/3,angulo-(PI/3)); koch(orden-1,r/3,angulo); }
}
/**************************/
2
« en: Sábado 30 de Junio de 2012, 02:37 »
bueno creo logre encontrar una en la web un codigo que dibuja el copo de koch me sera muy util para empezar a dibujar otro tipos de figuras co0n funciones recursivas
3
« en: Miércoles 27 de Junio de 2012, 18:14 »
funcion inciar curva de koch algoritmo Iniciar_Koch( Punto_Inicial, Longitud, Número_Iteraciones )
1. Declarar: Cursor como un punto y un ángulo 2. Inicializar Cursor:
3. Cursor.punto ← Punto_Inicial 4. Cursor.ángulo ← 0
5. Dibujar_Koch( Cursor, Longitud, Número_Iteraciones ) 6. Terminar
void koch()
{ float x ,y,lon,tet ; int n_i; x=100; y=200;
tet=0; dibujar_koch(x,y,lon,n_i,ang); }
4
« en: Miércoles 27 de Junio de 2012, 18:02 »
esta otra funcion avanzar es mucho mas rapida solo reemplace la funcion putpixel(x,y14) por la funcion line
void f(double x1,double y1,double ang,double d1) { double x,y; d1=100;
x=x1 + cos(ang)*d1; y=y1 + sin(ang)*d1;
setcolor(14); line(x1,y1,x,y);
}
5
« en: Miércoles 27 de Junio de 2012, 17:37 »
ahora voy a intentar realizar la siguiente funcion el cual tenemos por algoritmo en borland c++ Real Avanzar( Cursor, D ) 1. Declarar P como un punto: (x,y) 2. P.x ← Cursor.punto.x + D*cos( Cursor.ángulo ) 3. P.y ← Cursor.punto.y + D*sen( Cursor.ángulo ) 4. Dibujar_Línea( Cursor.punto.x, Cursor.punto.y, P.x, P.y ) 5. Terminar( P ) si me equivoco por favor corregirme #include<iostream.h> #include<conio.h> #include<stdio.h> #include<graphics.h> #include<dos.h> #define pi 3.141516
struct cursor { float x; float y; float ang; }; float avanzar(float*cursor,D) { struct punto{ float x; float y; }; punto= new cursor; p=new punto; p.x=Cursor.punto.x + D*cos( Cursor.ángulo ); p.y=Cursor.punto.y + D*sen( Cursor.ángulo ); line(Cursor.punto.x, Cursor.punto.y, P.x, P.y );
delete punto; delete p; } void main() { int gd=DETECT,gm; initgraph(&gd,&gm," "); closegraph(); }
todfavia no es funcional hay que depurar y solo estoy confeccionando las funciones bueno estoy trabajando en codigo sobre las curvas de koch en c++ y borland c++ 5.5 todavia no he logrado resultados validos mas sin embargos les adjunto lo que he trabajado ahsta ahora para a ver si alguien por hay puede hacerme una correcion de lo estoy haciendo
#include<iostream.h> #include<conio.h> #include<stdio.h> #include<graphics.h> #include<math.h> #define pi 3.141516
class tortuga{ private: double x; double y; double ang; public: void tortuga(double x,double y,double ang) { tortuga.x=x; tortuga.y=y; tortuga.ang=ang*pi/180; } void salta(double distancia) { double xx=x+distancia*cos(ang); double yy=y-distancia*sin(ang); salta(xx, yy); } void salta(double x, double y) { this.x=x; this.y=y; } void gira(double ang) { this.angulo+=angulo*pi/180;
} void traza(double distancia){ double xx=x+distancia*Math.cos(angulo); double yy=y-distancia*Math.sin(angulo); Line(xx, yy, x,y); salta(xx, yy); } }; void generaKoch(int nivel, double distancia){ if(nivel==0){ tortuga.traza(distancia); }else{ generaKoch(nivel-1, distancia/3); tortuga::gira(60.0); generaKoch(nivel-1, distancia/3); tortuga::gira(-120.0); generaKoch(nivel-1, distancia/3); tortuga:gira(60); generaKoch(nivel-1, distancia/3); } }
void main() { int gdriver = DETECT, gmode,n=6; double d=50; initgraph(&gdriver, &gmode, "c:\\tc\\bgi"); generaKoch(n,d); system("pause"); closegraph(); }
aunque tambien trabaje este funcion la proimera no estoy seguro si funciona no la he probado aun
void f(double x1,double y1,double D,double ang) { double x,y; D=0; do {
x=x1 + cos(ang)*D; y=y1 - sin(ang)*D; putpixel(x,y,14);
D=D+0.005; }while(D<=100);
}
6
« en: Miércoles 27 de Junio de 2012, 17:10 »
bueno como nadie se ha animado ha colaborarme yo voy a tomar este post como una bitacora y referencias para futuros trabajos que lo requieran. por otro lado navegando por internet encontre este mate en la pagina de c.conclase.net
La curva de Koch se construye dividiendo un segmento en tres partes iguales. El segundo segmento - el segmento del medio - forma la base de un triángulo equilátero, pero sin representar este segmento - la base. Esto significa que tenemos un segmento horizontal seguido de dos segmentos, estos dos últimos en forma de triángulo, y luego seguido de un tercer segmento horizontal. Esta estructura es la primitiva para construir esta curva. En siguientes repeticiones, cada segmento de esta curva primitiva es a su vez sometido al mismo algoritmo: segmento horizontal seguido de dos segmentos terminando en la "punta" de un triángulo equilátero y seguido por un tercer segmento horizontal.
La estructura primitiva se puede definir usando la siguiente regla o axioma de producción:
A → AIADDAIA,
donde A indica avanzar, lo cual implica trazar una línea recta,
I es girar a la izquierda, y
D es girar a la derecha.
En el caso de la curva de Koch, cada giro se hace con un ángulo de 60° = π/3 radianes. Los ángulos son 60° porque la curva de Koch se construye en base a un triángulo equilátero. Todos los ángulos de un triángulo equilátero son 60°.
Podemos observar el estado inicial de la curva de Koch, que simplemente es una línea recta, en la Siguiendo la regla que tenemos, avanzamos una sola vez. Para la primera iteración, obtenemos la secuencia: AIADDAIA con un ángulo de giro de 60°. Realmente estamos sustituyendo la regla de avanzar, inicialmente establecida, por la secuencia descrita por la regla de producción:
1. Avanzar el primer tercio. 2. Girar 60° a la izquierda. 3. Avanzar otro tercio. 4. Girar 60° a la derecha. 5. Girar 60° a la derecha. 6. Avanzar otro tercio. 7. Girar 60° a la izquierda. 8. Avanzar el último tercio. En la segunda iteración, realizamos el mismo método basándonos en nuestra regla de producción. Aplicamos: A → AIADDAIA para cada 'A'. Esto implica que sustituimos cada 'A' por su definición para lograr el siguiente producto: AIADDAIA I AIADDAIA DD AIADDAIA I AIADDAIA. He aquí el elemento recursivo. Al seguir esta regla obtenemos una imagen
odríamos reescribir la definición de esta regla para reflejar la recursividad:
A0 → Avanzar
An+1 → AnIAnDDAnIAn
donde n indica el número de repeticiones.
Para trazar estas líneas y seguir la regla de producción, nos basamos en la idea de un cursor gráfico. Este cursor contiene una pareja de coordenadas que describe su posición actual y un ángulo que describe su orientación. Necesitamos definir previamente la longitud inicial de A0. Cada vez que "avancemos", calculamos la siguiente posición usando a) la posición actual del cursor como punto inicial, b) tomando un tercio de la longitud inicial, y c) aplicando trigonometría (senos y cosenos) con el ángulo del cursor. La razón de usar un tercio de la longitud es para reducir el tamaño de cada figura para que la imagen final se limite a una distancia adecuada. Si usáramos la misma longitud inicial para cada segmento, entonces obtendríamos una imagen bastante grande cuantas más iteraciones hiciéramos; es decir, cuanto mayor sea el valor de n. La imagen sería tan grande que posiblemente parte de ella sobresalga la pantalla. Por esta razón, optamos por dividir el segmento inicial en partes de menor longitud, para que la curva final sea más manejable.
7
« en: Miércoles 27 de Junio de 2012, 04:27 »
bueno compañeros hastra aqui levo el codigo todavia no soy capaz de lograr que dibuje la curva de koch mas sin embargo llevo avances , estoy tratanto de utilizar el metodo de la tortuga para sistemas de lindemayer y crear fractales , en el momento quiero lograr una funcion recursiva que me dibuje en varios niveles el fractal o curva de koch
#include<iostream.h> #include<conio.h> #include<stdio.h> #include<graphics.h> #include<dos.h> #define pi 3.141516
void f(double x1,double y1,double ang,double d1); double F(int dx,double x ,double y,double d1); int k,tet; void main() { int gdriver = DETECT, gmode; initgraph(&gdriver, &gmode, "c:\\tc\\bgi"); k=0; for(int n=1,tet=60;n<=15,tet<=500;n++,tet=tet+60) F(k=k+tet,100,200,50); system("pause"); closegraph(); } void f(double x1,double y1,double ang,double d1) { double x,y; d1=0; do {
x=x1 + cos(ang)*d1; y=y1 + sin(ang)*d1; putpixel(x,y,14);
d1=d1+0.005; }while(d1<=100);
} double F(int dx,double x,double y,double d1) { int a=0; double conv,omeg; conv=pi/180; omeg=dx*conv; dx=omeg; f(x,y,a,d1); f(x+cos(a)*100,y+sin(a)*100,a-dx,d1); f(x+cos(a)*100+cos(a-dx)*100,y+sin(a)*100+sin(a-dx)*100,a+dx,d1); f(x+cos(a)*100+cos(a-dx)*100+cos(a+dx)*100,y+sin(a)*100+sin(a-dx)*100+sin(a+dx)*100,a,d1); return 0; }
8
« en: Viernes 22 de Junio de 2012, 21:14 »
interesante proyecto yo tambien en un tiempo me revente la cabeza con eso , pero pregunto si es absolutamente nesesario hacerlo en c++ porque en matlab es muy facil hacerlo,existen comandos que te cargan imagenes en matriz de arrays a las cuales les puedes hacer cualquier modificacion de los arrays y aplicarle convoluciones que vienen por defecto con matlab, la otra seria trabajar con una libreria como opengl o direct x que traen muchas opciones para trabajar y manipular graficos
9
« en: Viernes 22 de Junio de 2012, 21:03 »
por otro lado puedes mezclar el combinatorio con arreglos bidimensionales , claro que antes debes definir una funcion que te resuelva el combinatorio(un poco de estaidsticas) y recuerda mi amigo google es tu amigo
10
« en: Viernes 22 de Junio de 2012, 21:01 »
bueno debes considerar los numeros combinatorios el cual modelan perfectamente coeficientes de cualquier polinomio te dejo un link para que eches un ojito si te interesa http://www.estadisticaparatodos.es/taller/triangulo/triangulo.htmlpor otro lado se puede utlizar una funcion recurrente a ver si funciona en genral con el si ulitzas el combinatorio no es muy dificil sacar un algoritmo
11
« en: Viernes 22 de Junio de 2012, 20:50 »
le adjunto este codigo que modela las curvas bezier en c++ las cuales tienen detras un fuerte conceptoi matematico como polinomios y ecuaciones parametricas #include<graphics.h> #include<math.h> #include<conio.h>
#include<dos.h> #include<stdio.h> int b3p(int x0,int y0,int x1,int y1,int x2,int y2);
void main() { int gd=DETECT,gm;// define los controladores de tarjeta grafica en borland c++ initgraph(&gd,&gm,"");//inicializa el modo grafico b3p(80,280,180,0,280,280); getch(); closegraph(); } int b3p(int x0,int y0,int x1,int y1,int x2,int y2) { double x,y,xx,yy,t=0; line(x0,y0,x1,y1); line(x1,y1,x2,y2); do{ x=x0*pow(1-t,2)+ x1*2*t*(1-t)+ x2*pow(t,2);//ecuacion parametrica polinomial de grado dos y=y0*pow(1-t,2)+ y1*2*t*(1-t)+ y2*pow(t,2);//ecuacion parametrica para el eje Y putpixel(x,y,3);//dibuja un pixel en la cordenadas x,y y color 3 t=t+0.001;//incremento mediante el cual se dibujaran los pixeles }while(t<=2);limite por el cual se dibujan los pixeles return 0; }
si alguien puede hacerles corecciones o aportes algo se agradece
12
« en: Viernes 22 de Junio de 2012, 20:42 »
bueno estoy tratando de modelar un girasol en c++ con borlannd c++ 5.5 ya logre modelar lo de adentro con unas ecuaciones parametricas que me consegui en la web que modelan perfectamente los granos del centro de girasol
#include<iostream.h> #include<conio.h> #include<stdio.h> #include<graphics.h> #include<dos.h>
void main() { float x,y,ang,a,r;//xx,yy,ang1,k; a=2.55; //k=3.5; int gdriver = DETECT, gmode,n; cout<<"dame el orden del centro del girasol un valor entre 1 a 1500"<<endl; cin>>n;
initgraph(&gdriver, &gmode, "c:\\tc\\bgi"); //ang1=0; if(n<=1500) { do{ // do{ ang=n*137.7; r=a*sqrt(n); x=380+ r*cos(ang); y=290 + r*sin(ang); //xx=380+ r*sin(k*ang1)*cos(ang1); //yy=290+r*sin(k*ang1)*sin(ang1); putpixel(x,y,14); n++; //ang1=ang1+0.0005; //}while(ang1<=70); }while(n<=1700); }
system("pause"); closegraph(); }
de repente alguien pueda ehcarme una mano con mi trabajo , el cual es muy autodidsacta sobre computacion grafica
13
« en: Viernes 22 de Junio de 2012, 20:35 »
bueno estoy trabajando en codigo sobre las curvas de koch en c++ y borland c++ 5.5 todavia no he logrado resultados validos mas sin embargos les adjunto lo que he trabajado ahsta ahora para a ver si alguien por hay puede hacerme una correcion de lo estoy haciendo
#include<iostream.h> #include<conio.h> #include<stdio.h> #include<graphics.h> #include<math.h> #define pi 3.141516
class tortuga{ private: double x; double y; double ang; public: void tortuga(double x,double y,double ang) { tortuga.x=x; tortuga.y=y; tortuga.ang=ang*pi/180; } void salta(double distancia) { double xx=x+distancia*cos(ang); double yy=y-distancia*sin(ang); salta(xx, yy); } void salta(double x, double y) { this.x=x; this.y=y; } void gira(double ang) { this.angulo+=angulo*pi/180;
} void traza(double distancia){ double xx=x+distancia*Math.cos(angulo); double yy=y-distancia*Math.sin(angulo); Line(xx, yy, x,y); salta(xx, yy); } }; void generaKoch(int nivel, double distancia){ if(nivel==0){ tortuga.traza(distancia); }else{ generaKoch(nivel-1, distancia/3); tortuga::gira(60.0); generaKoch(nivel-1, distancia/3); tortuga::gira(-120.0); generaKoch(nivel-1, distancia/3); tortuga:gira(60); generaKoch(nivel-1, distancia/3); } }
void main() { int gdriver = DETECT, gmode,n=6; double d=50; initgraph(&gdriver, &gmode, "c:\\tc\\bgi"); generaKoch(n,d); system("pause"); closegraph(); }
14
« en: Domingo 6 de Noviembre de 2011, 04:34 »
bueno la clave es programar en la plataforma del celular como j2me , android,
15
« en: Domingo 6 de Noviembre de 2011, 04:29 »
bueno estoy explorando j2me me gustaria crear un proyectico para el colegio donde doy clases de quimica, el modelo consistiria en un formulario con las letras a,b,c y d y que ese formulario se pueda enviar por el bluetooth a un servidor que me representen esos datos creando curvas que me muestren informacion de los conceptos previos de los estudiantes,en netbeans he hecho cosas pero hasta el momento no he probado con el bluetooth el cual se implemta en java me mediante jsr 082, sera que alguien me colabora con ese proyectico
16
« en: Miércoles 15 de Diciembre de 2010, 20:25 »
lo quiero es hacer es es un interrruptor en OFF junto a un bombillo y que cuando se presione una tecla se ponga en ON y se encienda el bombillo, por favor orientacion en sdl c++, no estoy pidiendo codigo he adui my gameloop while( gameIsRunning ) { //Events //Logic //Rendering } //Game Loop while( quit == false ) { //Start the frame timer fps.start(); //Events while( SDL_PollEvent( &event ) ) { myDot.handle_input(); if( event.type == SDL_QUIT ) { quit = true; } } //Logic myDot.move(); //Rendering SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) ); myDot.show(); if( SDL_Flip( screen ) == -1 ) { return 1; } while( fps.get_ticks() < 1000 / FRAMES_PER_SECOND ){} } void Dot::handle_input() { if( event.type == SDL_KEYDOWN ) { switch( event.key.keysym.sym ) { case SDLK_UP: yVel -= DOT_HEIGHT / 2; break; case SDLK_DOWN: yVel += DOT_HEIGHT / 2; break; case SDLK_LEFT: xVel -= DOT_WIDTH / 2; break; case SDLK_RIGHT: xVel += DOT_WIDTH / 2; break; } } else if( event.type == SDL_KEYUP ) { switch( event.key.keysym.sym ) { case SDLK_UP: yVel += DOT_HEIGHT / 2; break; case SDLK_DOWN: yVel -= DOT_HEIGHT / 2; break; case SDLK_LEFT: xVel += DOT_WIDTH / 2; break; case SDLK_RIGHT: xVel -= DOT_WIDTH / 2; break; } } x += xVel; if( ( x < 0 ) || ( x + DOT_WIDTH > SCREEN_WIDTH ) ) { x -= xVel; } y += yVel; if( ( y < 0 ) || ( y + DOT_HEIGHT > SCREEN_HEIGHT ) ) { y -= yVel; } }
17
« en: Miércoles 15 de Diciembre de 2010, 04:38 »
este ejemplo lo consegui de la pagina lazy foo el jemplo tomaron unos dibujos para la animacion una hoja sprite , a esta animacion se llama sprite me gustaria que una alma caritativa me explicase mucho para poder impplementar el codigo en mis propias hojas de sprite //The headers #include "SDL/SDL.h" #include "SDL/SDL_image.h" #include <string> //Screen attributes const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; const int SCREEN_BPP = 32; //The frames per second const int FRAMES_PER_SECOND = 10; //The dimenstions of the stick figure const int FOO_WIDTH = 64; const int FOO_HEIGHT = 205; //The direction status of the stick figure const int FOO_RIGHT = 0; const int FOO_LEFT = 1; //The surfaces SDL_Surface *foo = NULL; SDL_Surface *screen = NULL; //The event structure SDL_Event event; //The areas of the sprite sheet SDL_Rect clipsRight[ 4 ]; SDL_Rect clipsLeft[ 4 ]; //The stick figure class Foo { private: //The offset int offSet; //Its rate of movement int velocity; //Its current frame int frame; //Its animation status int status; public: //Initializes the variables Foo(); //Handles input void handle_events(); //Moves the stick figure void move(); //Shows the stick figure void show(); }; //The timer class Timer { private: //The clock time when the timer started int startTicks; //The ticks stored when the timer was paused int pausedTicks; //The timer status bool paused; bool started; public: //Initializes variables Timer(); //The various clock actions void start(); void stop(); void pause(); void unpause(); //Gets the timer's time int get_ticks(); //Checks the status of the timer bool is_started(); bool is_paused(); }; SDL_Surface *load_image( std::string filename ) { //The image that's loaded SDL_Surface* loadedImage = NULL; //The optimized surface that will be used SDL_Surface* optimizedImage = NULL; //Load the image loadedImage = IMG_Load( filename.c_str() ); //If the image loaded if( loadedImage != NULL ) { //Create an optimized surface optimizedImage = SDL_DisplayFormat( loadedImage ); //Free the old surface SDL_FreeSurface( loadedImage ); //If the surface was optimized if( optimizedImage != NULL ) { //Color key surface SDL_SetColorKey( optimizedImage, SDL_SRCCOLORKEY, SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF ) ); } } //Return the optimized surface return optimizedImage; } void apply_surface( int x, int y, SDL_Surface* source, SDL_Surface* destination, SDL_Rect* clip = NULL ) { //Holds offsets SDL_Rect offset; //Get offsets offset.x = x; offset.y = y; //Blit SDL_BlitSurface( source, clip, destination, &offset ); } void set_clips() { //Clip the sprites clipsRight[ 0 ].x = 0; clipsRight[ 0 ].y = 0; clipsRight[ 0 ].w = FOO_WIDTH; clipsRight[ 0 ].h = FOO_HEIGHT; clipsRight[ 1 ].x = FOO_WIDTH; clipsRight[ 1 ].y = 0; clipsRight[ 1 ].w = FOO_WIDTH; clipsRight[ 1 ].h = FOO_HEIGHT; clipsRight[ 2 ].x = FOO_WIDTH * 2; clipsRight[ 2 ].y = 0; clipsRight[ 2 ].w = FOO_WIDTH; clipsRight[ 2 ].h = FOO_HEIGHT; clipsRight[ 3 ].x = FOO_WIDTH * 3; clipsRight[ 3 ].y = 0; clipsRight[ 3 ].w = FOO_WIDTH; clipsRight[ 3 ].h = FOO_HEIGHT; clipsLeft[ 0 ].x = 0; clipsLeft[ 0 ].y = FOO_HEIGHT; clipsLeft[ 0 ].w = FOO_WIDTH; clipsLeft[ 0 ].h = FOO_HEIGHT; clipsLeft[ 1 ].x = FOO_WIDTH; clipsLeft[ 1 ].y = FOO_HEIGHT; clipsLeft[ 1 ].w = FOO_WIDTH; clipsLeft[ 1 ].h = FOO_HEIGHT; clipsLeft[ 2 ].x = FOO_WIDTH * 2; clipsLeft[ 2 ].y = FOO_HEIGHT; clipsLeft[ 2 ].w = FOO_WIDTH; clipsLeft[ 2 ].h = FOO_HEIGHT; clipsLeft[ 3 ].x = FOO_WIDTH * 3; clipsLeft[ 3 ].y = FOO_HEIGHT; clipsLeft[ 3 ].w = FOO_WIDTH; clipsLeft[ 3 ].h = FOO_HEIGHT; } bool init() { //Initialize all SDL subsystems if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) { return false; } //Set up the screen screen = SDL_SetVideoMode( SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE ); //If there was an error in setting up the screen if( screen == NULL ) { return false; } //Set the window caption SDL_WM_SetCaption( "Animation Test", NULL ); //If everything initialized fine return true; } bool load_files() { //Load the sprite sheet foo = load_image( "foo.png" ); //If there was a problem in loading the sprite if( foo == NULL ) { return false; } //If everything loaded fine return true; } void clean_up() { //Free the surface SDL_FreeSurface( foo ); //Quit SDL SDL_Quit(); } Foo::Foo() { //Initialize movement variables offSet = 0; velocity = 0; //Initialize animation variables frame = 0; status = FOO_RIGHT; } void Foo::handle_events() { //If a key was pressed if( event.type == SDL_KEYDOWN ) { //Set the velocity switch( event.key.keysym.sym ) { case SDLK_RIGHT: velocity += FOO_WIDTH / 4; break; case SDLK_LEFT: velocity -= FOO_WIDTH / 4; break; } } //If a key was released else if( event.type == SDL_KEYUP ) { //Set the velocity switch( event.key.keysym.sym ) { case SDLK_RIGHT: velocity -= FOO_WIDTH / 4; break; case SDLK_LEFT: velocity += FOO_WIDTH / 4; break; } } } void Foo::move() { //Move offSet += velocity; //Keep the stick figure in bounds if( ( offSet < 0 ) || ( offSet + FOO_WIDTH > SCREEN_WIDTH ) ) { offSet -= velocity; } } void Foo::show() { //If Foo is moving left if( velocity < 0 ) { //Set the animation to left status = FOO_LEFT; //Move to the next frame in the animation frame++; } //If Foo is moving right else if( velocity > 0 ) { //Set the animation to right status = FOO_RIGHT; //Move to the next frame in the animation frame++; } //If Foo standing else { //Restart the animation frame = 0; } //Loop the animation if( frame >= 4 ) { frame = 0; } //Show the stick figure if( status == FOO_RIGHT ) { apply_surface( offSet, SCREEN_HEIGHT - FOO_HEIGHT, foo, screen, &clipsRight[ frame ] ); } else if( status == FOO_LEFT ) { apply_surface( offSet, SCREEN_HEIGHT - FOO_HEIGHT, foo, screen, &clipsLeft[ frame ] ); } } Timer::Timer() { //Initialize the variables startTicks = 0; pausedTicks = 0; paused = false; started = false; } void Timer::start() { //Start the timer started = true; //Unpause the timer paused = false; //Get the current clock time startTicks = SDL_GetTicks(); } void Timer::stop() { //Stop the timer started = false; //Unpause the timer paused = false; } void Timer::pause() { //If the timer is running and isn't already paused if( ( started == true ) && ( paused == false ) ) { //Pause the timer paused = true; //Calculate the paused ticks pausedTicks = SDL_GetTicks() - startTicks; } } void Timer::unpause() { //If the timer is paused if( paused == true ) { //Unpause the timer paused = false; //Reset the starting ticks startTicks = SDL_GetTicks() - pausedTicks; //Reset the paused ticks pausedTicks = 0; } } int Timer::get_ticks() { //If the timer is running if( started == true ) { //If the timer is paused if( paused == true ) { //Return the number of ticks when the timer was paused return pausedTicks; } else { //Return the current time minus the start time return SDL_GetTicks() - startTicks; } } //If the timer isn't running return 0; } bool Timer::is_started() { return started; } bool Timer::is_paused() { return paused; } int main( int argc, char* args[] ) { //Quit flag bool quit = false; //Initialize if( init() == false ) { return 1; } //Load the files if( load_files() == false ) { return 1; } //Clip the sprite sheet set_clips(); //The frame rate regulator Timer fps; //The stick figure Foo walk; //While the user hasn't quit while( quit == false ) { //Start the frame timer fps.start(); //While there's events to handle while( SDL_PollEvent( &event ) ) { //Handle events for the stick figure walk.handle_events(); //If the user has Xed out the window if( event.type == SDL_QUIT ) { //Quit the program quit = true; } } //Move the stick figure walk.move(); //Fill the screen white SDL_FillRect( screen, &screen->clip_rect, SDL_MapRGB( screen->format, 0xFF, 0xFF, 0xFF ) ); //Show the stick figure on the screen walk.show(); //Update the screen if( SDL_Flip( screen ) == -1 ) { return 1; } //Cap the frame rate if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND ) { SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() ); } } //Clean up clean_up(); return 0; }
este es el sprite lo que me gustaria saber es como hace sdl para procesar el orden de las posiciones en la hoja de sprite
18
« en: Jueves 25 de Noviembre de 2010, 22:57 »
estuve mirando unos tutoriales sobre en cgi en linux, es intersando se pueden integrar codigos c++ a html , no si laguien por ahi sabe de algun tutorial , y sobre servidores gratis que soporten esta opcion
19
« en: Miércoles 17 de Noviembre de 2010, 17:16 »
como agregarle un color por ejemplo rojo al interior del circulo y fondo gris #include <conio.h> #include <stdlib.h> #include <dos.h> #include <graphics.h> void main() { int monitor=DETECT,modo; initgraph(&monitor,&modo,"C:\tc\bgi"); do { circle(150,240,80); } while(!kbhit()); closegraph(); }
20
« en: Martes 16 de Noviembre de 2010, 20:52 »
el libro que te pase esta repleto de ejemplos #include <string.h> #include <stdlib.h> #include <stdio.h> #include <ctype.h> #include <conio.h> #include <iostream.h> #define MAX 5 char *p[MAX], *crecup(void); int spos=0; int rpos=0; char *crecup(void); void intro(void), calmac(char *c), revisar(void), eliminar(void); int main() { clrscr(); char s[80]; register int t; for(t=0;t<MAX; ++t) p[t] = NULL; //Inicializa el arreglo for(;;) { cout<<"nnOPCIONES DE ITERACION DE LA COLAnn"; cout<<"I. Introducirn"; cout<<"R. Revisarn"; cout<<"E. Eliminarn"; cout<<"S. Salirnn"; cout<<"Seleccione la opci¢n : "; gets(s); *s = toupper(*s); switch(*s) { case 'I': intro(); break; case 'R': revisar(); break; case 'E': eliminar(); break; case 'S': exit(0); } } } //INTRODUCIR CITAS EN LA COLA void intro(void) { char s[256], *p; do { cout<<"Introduce la cita " <<spos+1 <<" : "; gets(s); if(*s==0) break; //no hay entradas p = (char *)malloc(strlen(s)+1); if(!p) { cout<<"No hay memoria n"; return; } strcpy(p, s); if(*s)calmac(p); }while(*s); clrscr(); } //ver que hay en la cola void revisar(void) { clrscr(); register int t; cout<<endl <<endl <<" LISTADO DE CITAS" <<endl <<endl; for(t=rpos;t<spos;++t) cout<<t+1 <<p[t] <<endl; } //Eliminar una cita de la cola void eliminar(void) { clrscr(); char *p; if ((p=crecup())==NULL) return; cout<<endl <<"CITA ELIMINADA:" <<p; } //guardar una cita void calmac(char *c) { if(spos==MAX) { cout<<"n La Cola esta llena. Presione Intro n"; return; } p[spos] = c; spos++; } //Recuperar una cita char *crecup(void) { if(rpos==spos) { cout<<"No hay mas citas n"; return NULL; } rpos++; return p[rpos-1]; }
este esd el ejemplo de planificador de citas lease el libro que ahi encuentra mas y estoy seguro que aprendera a hacer colas por si mismo
21
« en: Martes 16 de Noviembre de 2010, 17:22 »
22
« en: Martes 16 de Noviembre de 2010, 04:27 »
nesesito representar un estructura tipo arbol binario este es mi codigo #include <conio.h> //De aquí utilizaremos la función kbhit() #include <stdlib.h> //De aquí sacaremos la función random() #include <dos.h> //Usaremos esta librería por la función delay(int valor) que nos permite //establecer un retardo en milisegundos. #include <graphics.h> //Esta es la librería que nos permite usar gráficos. void main() { int gdriver=DETECT, gmode, contador=0; initgraph(&gdriver,&gmode,"C:\BORLANDC\BGI"); //Iniciamos el modo gráfico. setbkcolor(11); do { setbkcolor(11); setcolor(11); setlinestyle(0,0,2); circle(450, 240,20); line(290,120,445,220); setcolor(11); setlinestyle(0,0,2); circle(270, 120,20); line(270,125,150,240); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(150,240,20); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(110, 290,20); line(150,240,110,290); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); line(150,240,70,350); circle(70, 350,20); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(130, 350,20); line(110,290,130,350); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(190, 350,20); line(200,300,190,350); setfillstyle(1,RED); line(150,240,200,300); setcolor(11); setlinestyle(0,0,2); circle(250, 350,20); line(200,300,250,350); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(200, 290,20); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(410, 290,20); line(410,290,445,240); setfillstyle(1,RED); setcolor(11); setlinestyle(0,0,2); circle(490, 290,20); line(490,290,445,240); setfillstyle(1,RED); } while(!kbhit()); //Si se pulsa alguna tecla, salimos del programa. closegraph(); //Cerramos el modo gráfico. }
por favor colabremem quw hasta aqui llegue ahora nesesito ingresarle los numeros al interior de circuferencencias, rellenar con color los circulos tal y como seria en un arbol binario , en los tres recorridos , inorden,postorden y preorden
23
« en: Miércoles 20 de Octubre de 2010, 20:37 »
en ese caso perdone amigo
24
« en: Miércoles 20 de Octubre de 2010, 17:06 »
pero hay que crear ficheros FILE*biblio por ejemplo, y para guardar el contenido de la memoria dinamica
25
« en: Miércoles 20 de Octubre de 2010, 16:51 »
me encantaria que esta funcion guardara el contenido de la memoria dinamica en un fichero de texto, no se por donde empezar void ingresar(void) { struct libro *b; char n; system("cls"); b = (struct libro *)malloc(sizeof(struct libro)); do { system("cls"); if(!b) { cout<<endl <<"no hay memoria"; return; } leecad("nIntroduce el nombre del libro: ", b->nomlib, 50); if(!b->nomlib[0]) break; //parar el proceso leecad("Introduce el autor del libro: ", b->autlib, 50); leecad("Introduce la editorial del libro: ", b->editlib, 50); leecad("Introduce el codigo ISBN: ", b->cod,30); dl_insert(b, &ppio, &final); gotoxy(5,15);cout<<"Para introducir otro libro intro S/N"<<endl; gotoxy(5,16);cin>>n; } while((n=='s')||(n=='S')); menu(); clrscr(); }
|
|
|