All pastes #784106 Raw Edit

Jorge Grimaldos

public cpp v1 · immutable
·published 2007-11-19 15:32 UTC
rendered paste body
/**********Prueba de movimiento circularSe mueve un rectangulo en un cuarto de circulo**********//**********Librerias estandar**********/#include <math.h>/**********Librerias OpenCV**********/#include "highgui.h"/**********Deficiones**********/#define _ANCHO_ 400#define _ALTO_ 300#define _PI_ 3.14159265/**********Variables globales**********//**********Main**********/int main ( void ){    /**********    Variables main e inicializacion    xinicial, yinicial:        son para tener la posicion incial del rectangulo    radio:        se refiere al radio del circulo sobre el que va el movimiento    contador, repeticiones:        se utilizan para controlar el flujo del programa    tinicial, tevaluacion:        se utilizan para determinar el tiempo relativo y calcular los angulos.    frecuencia:        se utiliza para determinar la cantidad de giros en un segundo    factor_tiempo:        se utiliza para convertir los milisegundos a radianes    pieza:        se utiliza para representar las condiciones del rectangulo a girar    **********/    int xinicial = 180 ;    int yinicial = 140 ;    int radio = 100 ;    int contador = 0 ;    int repeticiones = 10 ;    DWORD tinicial, tevaluacion;    float frecuencia = 0.25 ;    float factor_tiempo ;    CvRect pieza ;    pieza.height = 20 ;    pieza.width = 40 ;    pieza.x = xinicial ;    pieza.y = yinicial ;    IplImage * imagen ;    imagen = cvCreateImage( cvSize( _ANCHO_ , _ALTO_ ) , 8 , 3 ) ;    /**********    Codigo principal    **********/    cvNamedWindow( "imagen" , 1 ) ;    tinicial = GetTickCount() ;    /**********    factor_tiempo seria simila a la velocidad angular incluyendo la conversion de milisegundos    **********/    factor_tiempo = 2 * _PI_ * frecuencia / 1000 ;    while ( contador < repeticiones )    {        cvZero( imagen ) ;        tevaluacion = GetTickCount() ;        /**********               Este if se encarga de reiniciar el angulo para no tener que trabajar con multiplos de PI y de incrementar el contador, modificar las repeticiones        trabajadas y dar una pausa en el movimiento para que se sienta cuando se hizo una repeticion.        **********/        if ( factor_tiempo * ( tevaluacion - tinicial) > _PI_)        {            cvWaitKey(200);            tinicial = tevaluacion ;            contador++ ;        }        /**********        En este if (al igual que en el siguiente), establecemos las condiciones para el primer sentido (basicamente, manipulamos los signos para obtener el        resultado deseado)               **********/        if ( factor_tiempo * ( tevaluacion - tinicial) < _PI_ / 2)        {            pieza.x = xinicial - radio * cos( factor_tiempo * ( tevaluacion - tinicial ) ) ;            pieza.y = yinicial + radio * sin( factor_tiempo * ( tevaluacion - tinicial ) ) ;        }        if ( factor_tiempo * ( tevaluacion - tinicial) > _PI_ / 2 && factor_tiempo * ( tevaluacion - tinicial) < _PI_ )        {            pieza.x = xinicial + radio * cos( factor_tiempo * ( tevaluacion - tinicial ) ) ;            pieza.y = yinicial + radio * sin( factor_tiempo * ( tevaluacion - tinicial ) ) ;        }        /**********        Para dibujar, toca tomar en cuenta las diferencias entre la estructura CvRect y el rectangulo dibujado via CvRectangle        **********/        cvRectangle( imagen ,cvPoint( pieza.x , pieza.y ) , cvPoint( pieza.x + pieza.width,pieza.y + pieza.height ) , CV_RGB( 255 , 0 , 0 ) );        cvShowImage( "imagen" , imagen );        cvWaitKey( 1 );    }    return 0;}