Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - kaltorak

#1
Hola a todos

Yo he sufrido en alguna ocasión el cierre de varios temas por parte de Eternal Idol, y si bien me a sentado mal, como nos sucede a todos o la gran mayoría de los que estamos en este foro, he de decir que no es culpa de Eternal Idol, no hay que pagarlo con el, de lo único que tendría culpa seria de ser demasiado estricto a la hora de aplicar las normas del foro, pero todos aceptamos esas normas cuando posteamos en este foro.

Por otro lado dichas normas deberían de revisarse y modificarse, pues si de un tema hay mil mensajes eso no significa que dicho tema este mas que solucionado y haya que cerrarlo sino que ese tema es un tema interesante y habría que motivar incluso mas la participación.

Yo echo en falta quizás un poco mas de libertad a la hora de crear temas interesantes que por no ser una pregunta o por incluir código completo son cerrados.

Un saludo
Kaltorak.

#2
Programación C/C++ / Re: SERIES DE TAYLOR C++
12 Septiembre 2013, 03:53 AM
Cita de: Hectorues en 12 Septiembre 2013, 02:47 AM
Hola alguien me puede ayudar con la siguiente serie de taylor porfavor, sin−1  x =x+1/2.x^3/3+1/2.3/4.x^5/5+1/2.3/4.5/6.x^7/7.... (el punto significa multiplicacion) lo que necesto es un programa que la resuelva incluyendo recursividad. Muchas gracias de antemano y espero respuestas.

Nos encantaría ayudarte, pero no hacerte la tarea, si subes el código que llevas hasta el momento y nos dices donde tienes el problema, estaríamos encantados de ayudarte  ;)

Un saludo
Kaltorak.
#3
Como bien te a dicho amchacon poner NULL o poner 0 es exactamente lo mismo.

Una opción es poner -1 y así decirle al programa que no lo use poniendo este código.

Código (cpp) [Seleccionar]

   void Entity::setCoords(int X, int Y)
   {
    if (X >= NULL) box.x = X;
    if (Y >= NULL) box.y = Y;
   }


O crear 2 nuevas funciones para definir cada una de las coordenadas por separado así.

Código (cpp) [Seleccionar]

   void Entity::setCoordX(int X)
   {
    box.x = X;
   }


Código (cpp) [Seleccionar]

   void Entity::setCoordY(int Y)
   {
    box.y = Y;
   }


Una comprobación que incluiría también en estas funciones, es que la coordenada introducida no exceda los limites de la pantalla, para evitar futuros errores a la hora de visualizar los objetos.

Y por ultimo y no con ello menos importante  ;D

Aquí te dejo un código para que veas como hacer un cuadro con dos triángulos en Opengl, tanto con color, como con texturas  ;)

Código (cpp) [Seleccionar]

#ifdef __cplusplus
    #include <cstdlib>
#else
    #include <stdlib.h>
#endif

#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
#include <SDL/SDL_Image.h>


int main ( int argc, char** argv )
{

//Definimos las variable box y box1 del tipo SDL_Rect
SDL_Rect box,box1;

//Inicializamos los valores de box para posicionarlo en las posicion 100,100 y le damos un ancho y un alto de 100.
box.x = 100;
box.y = 100;
box.w = 100;
box.h = 100;

/*Inicializamos los valores de box1 para posicionarlo en las posicion 300,200
   y le damos el ancho y un alto de la imagen que vamos a cargar como textura.*/
box1.x = 300;
box1.y = 200;
box1.w = 34;
box1.h = 26;

//Inicializamos el modo de video de las SDL.
SDL_Init(SDL_INIT_VIDEO);

//Creamos la Surface principal del juego, la que se va a mostrar en pantalla.
SDL_SetVideoMode(640, 480, 32, SDL_OPENGL | SDL_GL_DOUBLEBUFFER | SDL_HWSURFACE | SDL_HWACCEL );

//Cambiamos el titulo de la ventana por "Cuadro Hecho con triangulos".
SDL_WM_SetCaption ("Cuadro Hecho con triangulos", NULL);

//Activamos el modo Interpolado de Opengl
glShadeModel(GL_SMOOTH);
//cargamos la matriz de proyección en modo ortográfico al solo usar 2D
glOrtho(0, 640, 480, 0, -1, 1);

//Carmos la imagen que vamos a usar como textura.
SDL_Surface *Image = IMG_Load("conejo.png");

//Definimos la variable Textura que contendra la ID de la textura.
GLuint Textura;

//Generamos el ID de la Textura.
glGenTextures(1, &Textura);
//Referenciamos la TExtura para que todas las operaciones posteriores afecten a esa textura.
glBindTexture(GL_TEXTURE_2D, Textura);
//Aplicamos los filtros a la textura para que se escale en funcion de la distancia.
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//Creamos la Textura.
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, Image->w, Image->h, 0, GL_RGB, GL_UNSIGNED_BYTE, Image->pixels);

//Liberamos la imagen cargada por que ya no la vamos a usar mas.
SDL_FreeSurface(Image);

    bool done = false;
    //Bucle principal
    while (!done)
    {
        /*Comprobamos los eventos del sistema para comprobar si la ventana a sido cerrada o si se
          pulsa escape en caso de que asi sea ponemos El valor true en done para que finalice la
          ejecucion del programa.*/
        SDL_Event event;
        while (SDL_PollEvent(&event))
        {
            switch (event.type)
            {
            case SDL_QUIT:
                done = true;
                break;

            case SDL_KEYDOWN:
                {
                    if (event.key.keysym.sym == SDLK_ESCAPE)
                        done = true;
                    break;
                }
            }
        }

////////////Primer cuadro sin texturizar pintado de verde.///////////////

  //Seleccionamos el color verde para Pintar el primer cuadro.
  glColor3ub(0,255,0);
  //Comenzamos a pintar el primer cuadro usando 2 triangulos.
  glBegin(GL_TRIANGLES);
  //Primer triangulo
  glVertex2i(box.x, box.y);
  glVertex2i(box.x, box.y + box.h);
  glVertex2i(box.x + box.w, box.y);

  //Segundo Triangulo
  glVertex2i(box.x, box.y + box.h);
  glVertex2i(box.x + box.w, box.y);
  glVertex2i(box.x + box.w, box.y + box.h);
  glEnd();

////////////Fin del primer cuadro sin texturizar.///////////////


//////////////////Segundo cuadro aplicándole texturas./////////////

  //Especificamos el modo de aplicar la textura sobre el cuadro para que no le afecte el color del cuadro.
  glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );

  //Activamos la Textura para usarla en el cuadro
  glEnable(GL_TEXTURE_2D);
  //Comenzamos a pintar el segundo cuadro usando 2 triangulos.
  glBegin(GL_TRIANGLES);
  //Primer Triangulo
  glTexCoord2i(0,0);glVertex2i(box1.x, box1.y);
  glTexCoord2i(0,1);glVertex2i(box1.x, box1.y + box1.h);
  glTexCoord2i(1,0);glVertex2i(box1.x + box1.w, box1.y);
  //Segundo Triangulo
  glTexCoord2i(0,1);glVertex2i(box1.x, box1.y + box1.h);
  glTexCoord2i(1,0);glVertex2i(box1.x + box1.w, box1.y);
  glTexCoord2i(1,1);glVertex2i(box1.x + box1.w, box1.y + box1.h);
  glEnd();
  //Desactivamos la textura.
  glDisable(GL_TEXTURE_2D);

  ////////////////////Fin del Segundo cuadro usando texturas./////////////////////////

  //Mostramos el buffer en pantalla
  SDL_GL_SwapBuffers();

    }

//Devolvemos 0 por que todo a salido bien.
return 0;
}


Se que faltan muchas cosas, pero como era solo para que vieras como funcionaba lo de los dos triángulos no me he complicado mucho la vida  ;D

Aquí te lo dejo el código fuente, esta echo en Windows por que no puedo usar Opengl en Linux, por que lo tengo virtualizado con VirtualBox y no funciona  :-(

http://ultrashare.net/hosting/fl/38544fe607

Un saludo
Kaltorak.
#4
Hola SrCooper

he localizado un error a parte del que mencionas en el post mira.

Código (cpp) [Seleccionar]
void Entity::setCoords(int X, int Y)
{
 if (X != NULL) box.x = X;
 if (X != NULL) box.y = Y;
}


Aquí le dices que compruebe si X es distinto de 0 y le dices que ponga X, pero debajo no deberías comprobar si Y es 0 en vez de comprobar nuevamente X??

Aparte por que motivo no se puede colocar en la posición 0,0 ??

Esto no es un error pero si un mal habito de programación en opengl

Código (cpp) [Seleccionar]
 glBegin(GL_QUADS);
 glTexCoord2i(0,0); glVertex2i(box.x, box.y);
 glTexCoord2i(1,0); glVertex2i(box.x + box.w, box.y);
 glTexCoord2i(1,1); glVertex2i(box.x + box.w, box.y + box.h);
 glTexCoord2i(0,1); glVertex2i(box.x, box.y + box.h);
 glEnd();


El motivo es que las tarjetas 3d mueven triángulos y no cuadrados, así que cuando le pasamos esto la tarjeta lo que hace es descomponer el cuadrado en 2 triángulos, con el gasto de recursos que ello con lleva, que si bien hoy en día es ínfimo, lo ideal para optimizar la librería seria que le pasaras los 2 triángulos en vez del cuadrado.

Haber si tengo un ratito esta noche y lo miro todo mas detenidamente  ;)

Un saludo
Kaltorak.
#5
Hola a todos

Me gustaría portar el minijuego de hackear las tiendas del saint row 4 a pc, alguno me ayuda con los gráficos son muy simples, no os llevaran mucho tiempo, los haria yo pero soy muy negado con el photoshop y demás programas de dibujo.

Aquí os pongo una captura de de dicho minijuego .


Un saludo
Kaltorak.
#6
Hola chino_r

Lo primero, por favor no uses mayúsculas en los títulos de los post eso es como si nos estuvieras gritando  :rolleyes:

Yo si quieres te puedo echar una mano con los problemas que te surjan a la hora de programar en C/C++,lo primero es hacerte con un buen libro de programación en C++, yo por mi parte te aconsejo el libro de  Fco.Javier Ceballos "C/C++ Curso de programacion" es muy bueno y esta lleno de ejemplos y ejercicios para que desde el primer día empieces a programar en C/C++.

De forma gratuita te recomiendo que te pases por estas paginas


http://minidosis.org/C++/

en donde encontraras unos cursos muy buenos de programación en C/C++.

Un saludo
Kaltorak
#7
Hola Xedrox

En cuanto a un editor de textos bueno para programar, yo te recomiendo el ultraedit, yo lo he usado mucho cuando programaba para psp y es francamente espectacular y muy configurable, es de pago pero le da mil vueltas a los de mas y siempre puedes buscarlo en google  ;)

IDE para C/C++ voy a ser maltratado por decir esto pero soy un ferviente admirador de Dev-C++, pero no la versión abandonada, si no la versión de Orwell que es compatible con windows 8.

También he usado CodeBlocks y si bien no me disgusta no acabo de cogerle el punto.

Como todo cada uno se hace a usar un determinado programa y ese es el mejor, yo te aconsejo que pruebes los que te hemos dicho y te quedes con el que mas te guste, da igual lo que te digan por que siempre llegara alguno diciéndote de este es mejor y este no me gusta y encima mira he escrito un post poniéndolo verde,Etc.. son tonterías de niños el mejor IDE o Editor de textos es con el que mejor te apañes  ;)

Un saludo
Kaltorak

#8
Hola juan.valadez

Tiene muy buena pinta haber si saco un ratito luego  y la pruebo, pero por lo que he visto en los vídeos esta genial ;-)

un saludo
kaltorak.
#9
Hola ramona98

Tu código tiene varios errores.

El primero a la hora de declarar el numero de elementos que tendrá el array "misfechas" pues has puesto que tendrá un solo elemento y como quieres que contenga dos elementos, tienes que poner 2, pues si pones uno el programa puede funcionar pero dará una error y se cerrara al perderse en la memoria.

Asi es como lo tienes puesto tu:

Código (cpp) [Seleccionar]
struct horayfecha misfechas[1];

y así es como tiene que ser:

Código (cpp) [Seleccionar]
struct horayfecha misfechas[2];

Otro error es a la hora de asignar valor a los arrays contenidos en la estructura.

Citar
Código (cpp) [Seleccionar]
misfechas[0].timz = { 23, 30};
  misfechas[0].data = { 1, 7, 1998 };
 
  misfechas[1].timz = { 22, 32};
  misfechas[1].data = { 2, 7, 1997 };


Este tipo de asignación de datos a aun array solo se pude hacer cuando es declarado no una vez que ha sido declarado, mira te pongo un ejemplo para que veas lo que digo.

Código (cpp) [Seleccionar]

int Tiempo[] = {23,30}; //Valido.


Código (cpp) [Seleccionar]
int Tiempo[2];

Tiempo[] = {23,30}; // No valido

//La forma correcta de hacerlo seria esta.

Tiempo[0] = 23;
Tiempo[1] = 30;


Otro error que tiene tu código es cuando declaras la función, lo haces pidiendo que como argumentos se introduzcan 4 arrays de tipo " int", pero luego cuando llamas a la función le pasas 2 estructuras en vez de los 4 arrays de tipo " int" que espera recibir.

Código (cpp) [Seleccionar]
int tiemporeal(int tim1[1], int dat1[2], int tim2[1], int dat2[2])

Código (cpp) [Seleccionar]
tiemporeal(misfechas[0], misfechas[1])

La forma correcta de llamar a la función que has creado seria así.

Código (cpp) [Seleccionar]
tiemporeal(misfechas[0].timz,misfechas[0].data,misfechas[1].timz,misfechas[1].data)

Aquí te pongo tu código modificado y operativo  ;)

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#include <string.h>



// Exercise 12-2: Design a structure to store time and date. Write a function to find
// the difference between two times in minutes.

int tiemporeal(int tim1[], int dat1[], int tim2[], int dat2[]) {
   // Idea= calcular minutos desde fecha 0 para ambas fechas
   // calcular diferencia entre ellas y return valor absoluto
   int difmin=2; // valor dado para probar

   return difmin;
}

int main(void)
{
   int i;

  struct horayfecha {
   int timz[2]; // Hora, minutos
   int data[3];  // dia, mes y ano en digitos
   };

  struct horayfecha misfechas[2];

  misfechas[0].timz[0] = 23;
  misfechas[0].timz[1] = 30;
  misfechas[0].data[0] = 1;
  misfechas[0].data[1] = 7;
  misfechas[0].data[2] = 1988;

  misfechas[1].timz[0] = 22;
  misfechas[1].timz[1] = 32;
  misfechas[1].data[0] = 2;
  misfechas[1].data[1] = 7;
  misfechas[1].data[2] = 1997;


printf ("numero de minutos entre ambas fechas es %d\n", tiemporeal(misfechas[0].timz,misfechas[0].data,misfechas[1].timz,misfechas[1].data) );


return (0);
}


Un saludo
Kaltorak.
#10
Programación C/C++ / Re: [Ayuda] Estructuras
22 Agosto 2013, 07:53 AM
Ups si fallo mio lo siento, cuando puse tu ejemplo no me di cuenta de que estaba mal puesto  :-[

Ya lo he corregido

Un saludo
kaltorak.