martes, 16 de marzo de 2021

Reloj dígital-analógico con SDL

  Página principal


Reloj dígital-analógico
con
SDL


Estaba yo repasando la trigonometría con mi hija que tenía exámenes, cuando se me ocurrió realizar un reloj analógico.
A modo de resumen rápido, podemos hacernos una idea de que el seno de un angulo es la coordenada Y y el coseno la coordenada X, sobre una circunferencia de radio 1.
Para conseguir una linea tipo agujas del reloj hacemos el siguiente cálculo.

linea(Xorigen,Ydestino,Xorigen+tamaño*(coseno(angulo)),Ydestino+tamaño*(seno(angulo))

Ahora tenemos que pensar que la dirección de los grados van al contrario a la dirección de las agujas del reloj.
Y también debemos tener en cuenta que los 0 segundos corresponden a 90 grados.
Todas estas modificaciones programarlas, además de realizar el cambio de grados a radianes que es la que utiliza la librería en C.
El calculo de senos y cosenos suele llevar tiempo, pero para este caso que solo se calcula cada segundo, no hace falta optimizar nada.
He realizado una comparativa de cálculo de seno para ver la diferencia de tiempos entre una forma u otra.
En programación 3D que se necesita mucha rapidez se utilizan tablas precalculadas para aumentar la velocidad.

---------------------------0.47 Segundos------
#include <stdio.h>
#include <stdlib.h>
#include "math.h"

float n,out;
int z,z1;
float ns;
float ma[360];

int main()
{
    printf("senos creando tablas\n");
    for(z=0;z<360;z++) {  ma[z]=sin(z);  }
   for(z1=0;z1<2000000;z1++)
   {
    for(z=0;z<360;z++)   {      out=ma[z];     }
   }
    return 0;
}

----------------------------49 segundos---------------
#include <stdio.h>
#include <stdlib.h>
#include "math.h"

float n,out;
int z,z1;
float ns;
float ma[360];

int main()
{
    printf("senos sin tablas\n");
   for(z1=0;z1<2000000;z1++)
   {
    for(z=0;z<360;z++)    {     out=sin(z);     }
   }
    return 0;
}
Con tablas es 100 veces más rápido.



En un principio había creado una esfera que se calculaba cada segundo, pero al final he utilizado un fondo de imagen, es más vistoso, además de poder cambiar el fondo a nuestro gusto.

Al ser programado en SDL es multiplataforma, y se pueden generar ejecutables tanto en Linux como en Windows.

PROGRAMA FUENTE Y LINUX

PROGRAMA WINDOWS Y LIBRERÍAS


Saludos.
Juan Galaz


Bibliografía:

No hay comentarios:

Publicar un comentario