⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acontourcollection.cpp

📁 微软的基于HMM的人脸识别原代码, 非常经典的说
💻 CPP
📖 第 1 页 / 共 3 页
字号:
    int Y_Mul = 1;
    int X_Mul = 1;
    double displacement = 1;
    double interval     = 6;
    double t, t_step;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////
    Power = GetVali( Max_Power - 1, 1 );

    /////////////// allocating memory ///////////
    Coeff = new double[ Power ];
    if( Coeff == NULL )
    {
        return NULL;
    }
   
    /////////////// initialising /////////
    for( int i = 0 ; i < Power ; i++ )
    {
        Coeff[i] = GetVald( Max_Coeff );
    }

    /////////////// initialising /////////
    t_step = 0;
    while( t_step == 0. )
    {
        Y_Mul = GetVali( Y_Mul_Max ,1);
        X_Mul = GetVali( X_Mul_Max ,1);
        interval = GetVald( Max_Interval );
        displacement = GetVald( Max_Interval - interval );

        t_step = (int)( interval * X_Mul );
        t_step = interval / t_step;
    }

    //////////// create contour //////////////////////////
    FirstPt.x = static_cast<int>( displacement * X_Mul );
    FirstPt.y = static_cast<int>( Pol( displacement, Coeff, Power ) * Y_Mul );
    cvSeqPush( Seq, &FirstPt );

    for( t = displacement ; t < interval + displacement ; t += t_step )
    {
        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;

        FirstPt.x = static_cast<int>( t * X_Mul );
        FirstPt.y = static_cast<int>( Pol( t, Coeff, Power ) * Y_Mul );

        Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
    }
    
    delete[] Coeff;
    return Seq;
} // CvSeq* Polimon()


/****************************************************************/
/****************         Ellips        *************************/
/****************************************************************/
CvSeq* Ellips( CvMemStorage* Storage )
{
    /////
    int X_Mul_Max = 8;
    int Y_Mul_Max = 8;
    /////
    int Y_Mul = 2;
    int X_Mul = 2;
    double t, t_step;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////
    t_step = 0;
    while( t_step == 0. )
    {
        Y_Mul = GetVali( Y_Mul_Max ,1);
        X_Mul = GetVali( X_Mul_Max ,1);

        t_step = 1. / ( X_Mul * Y_Mul );
    }

    //////////// create contour //////////////////////////
    FirstPt.x = static_cast<int>( X_Mul );
    FirstPt.y = static_cast<int>( 0 );
    cvSeqPush( Seq, &FirstPt );

    for( t = 0 ; t < 2 * PI() ; t += t_step )
    {
        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;

        FirstPt.x = static_cast<int>( cos( t ) * X_Mul );
        FirstPt.y = static_cast<int>( sin( t ) * Y_Mul );

        Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
    }

    return Seq;
} // CvSeq* Ellips()

/****************************************************************/
/****************  folium of descartes  *************************/
/****************************************************************/
CvSeq* FoliumOfDescartes( CvMemStorage* Storage )
{
    /////
    int X_Mul_Max = 5;
    int Y_Mul_Max = 5;
    int Max_Interval = 10;
    int Max_A  = 5;
    /////
    int Y_Mul = 2;
    int X_Mul = 2;
    double a;
    double displacement = 1;
    double interval     = 5;
    double t, t_step;
    double d;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////
    a = GetVald( Max_A -0.1 , 0.1 );
    t_step = 0;
    while( ( t_step == 0. ) || ( displacement == -1. ) )
    {
        Y_Mul = GetVali( Y_Mul_Max ,1);
        X_Mul = GetVali( X_Mul_Max ,1);
        interval = GetVald( Max_Interval );                                                                                                                                                                                                                        
        displacement = GetVald( Max_Interval - interval );

        t_step = interval / 500;
    }

    //////////// create contour //////////////////////////
    d = 1 + pow( displacement,3 );
    FirstPt.x = static_cast<int>( X_Mul * (3*a*displacement) / d  );
    FirstPt.y = static_cast<int>( Y_Mul * (3*a*pow(displacement,2) )/ d   );
    cvSeqPush( Seq, &FirstPt );

    for( t = displacement ; t < interval + displacement ; t += t_step )
    {
        if( t == -1 ) continue;

        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        d = 1 + pow( t,3 );
        FirstPt.x = static_cast<int>( X_Mul * (3*a*t) / d  );
        FirstPt.y = static_cast<int>( Y_Mul * (3*a*pow(t,2) )/ d   );

        Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
    }
    
    return Seq;
} // CvSeq* FoliumOfDescartes()


/****************************************************************/
/****************       epicycloid      *************************/
/****************************************************************/
CvSeq* Epicycloid( CvMemStorage* Storage )
{
    /////
    int X_Mul_Max = 1;
    int Y_Mul_Max = 1;
    int Max_Interval = 10;
    int Max_A  = 5;
    int Max_B  = 5;
    int Max_L  = 5;
    /////
    int Y_Mul = 2;
    int X_Mul = 2;
    double a = 0,b,l;
    double displacement = 1;
    double interval     = 5;
    double t, t_step;
    double d;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////
    b = GetVald( Max_B -0.1 , 0.1 );
    l = GetVald( Max_L -0.1 , 0.1 );
    t_step = 0;
    while( ( t_step == 0. ) || ( a == 0. ) )
    {
        Y_Mul = GetVali( Y_Mul_Max ,1);
        X_Mul = GetVali( X_Mul_Max ,1);
        interval = GetVald( Max_Interval );                                                                                                                                                                                                                        
        displacement = GetVald( Max_Interval - interval );

        a = GetVald( Max_A -0.1 , 0.1 );
        t_step = interval / 500;
    }

    //////////// create contour //////////////////////////
    d = a + b;
    FirstPt.x = static_cast<int>( X_Mul * ( d * cos(displacement) - l*a*cos(d*displacement/a)  ) );
    FirstPt.y = static_cast<int>( Y_Mul * ( d * sin(displacement) - l*a*sin(d*displacement/a)  ) );
    cvSeqPush( Seq, &FirstPt );

    for( t = displacement ; t < interval + displacement ; t += t_step )
    {

        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        d = a + b;
        FirstPt.x = static_cast<int>( X_Mul * ( d * cos(t) - l*a*cos(d*t/a) ) );
        FirstPt.y = static_cast<int>( Y_Mul * ( d * sin(t) - l*a*sin(d*t/a) ) );

        Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
    }
    
    return Seq;
} // CvSeq* Epicycloid()

/****************************************************************/
/****************       hypocycloid      *************************/
/****************************************************************/
CvSeq* Hypocycloid( CvMemStorage* Storage )
{
    /////
    int X_Mul_Max = 5;
    int Y_Mul_Max = 5;
    int Max_Interval = 5;
    int Max_A  = 5;
    int Max_B  = 5;
    int Max_L  = 5;
    /////
    int Y_Mul = 1;
    int X_Mul = 1;
    double a = 0,b,l;
    double displacement = 0.1;
    double interval     = 0.1;
    double t, t_step;
    double d;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////
    b = GetVald( Max_B -0.1 , 0.1 );
    l = GetVald( Max_L -0.1 , 0.1 );
    t_step = 0;
    while( ( t_step == 0. ) || ( a == 0. ) )
    {
        Y_Mul = GetVali( Y_Mul_Max ,1);
        X_Mul = GetVali( X_Mul_Max ,1);
        interval = GetVald( Max_Interval );                                                                                                                                                                                                                        
        displacement = GetVald( Max_Interval - interval );

        a = GetVald( Max_A -0.1 , 0.1 );
        t_step = interval / 500;
    }

    //////////// create contour //////////////////////////
    d = a - b;
    FirstPt.x = static_cast<int>( X_Mul * ( d * cos(displacement) - l*a*cos(d*displacement/a)  ) );
    FirstPt.y = static_cast<int>( Y_Mul * ( d * sin(displacement) - l*a*sin(d*displacement/a)  ) );
    cvSeqPush( Seq, &FirstPt );

    for( t = displacement ; t < interval + displacement ; t += t_step )
    {

        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
        d = a - b;
        FirstPt.x = static_cast<int>( X_Mul * ( d * cos(t) - l*a*cos(d*t/a) ) );
        FirstPt.y = static_cast<int>( Y_Mul * ( d * sin(t) - l*a*sin(d*t/a) ) );

        Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
    }
    
    return Seq;
} // CvSeq* Hypocycloid()


/****************************************************************/
/****************           ___         *************************/
/****************************************************************/
CvSeq* ___( CvMemStorage* Storage )
{
    /////
    int Max_Time = 30;
    int Max_Amplitude  = 5;
    /////
    int t;
    /////
    CvPoint FirstPt, SecondPt;
    /////
    CvSeq*        Seq     = NULL;

    ///////////// create contour //////////
    if( !CreateContour( &Seq,CV_SEQ_POLYGON,&Storage) )
    {
        return NULL;
    }

    /////////////// initialising /////////


    //////////// create contour //////////////////////////
    FirstPt.x = 0;
    FirstPt.y = GetVali( 2 * Max_Amplitude, -Max_Amplitude );
    cvSeqPush( Seq, &FirstPt );

    for( t = 0 ; t < Max_Time ; t++ )
    {

        SecondPt.x = FirstPt.x;
        SecondPt.y = FirstPt.y;

        FirstPt.x = t;

        if( GetVali( 1000 ) < 500 ) 
        {
            cvSeqPush( Seq, &FirstPt );
        }
        else
        {

            FirstPt.y += GetVali( 2 * Max_Amplitude, -Max_Amplitude );
            Line( SecondPt,FirstPt,Seq,_CV_LINE_PUTENDPT);
        }
        
    }
    
    return Seq;
} //
/*****************************************************************************/
/*****************************************************************************/
/***                          Contour table                                ***/
/*****************************************************************************/
/*****************************************************************************/
Contour Contours[] =
{
    PolyLine, 
    arccos,   
    arctan,   
    ch,       
    Exp,      
    Floor,    
    Log,    
    Pow,    
    Sin,    
    Polimon,
    Ellips,    
    FoliumOfDescartes, 
    Epicycloid,  
    Hypocycloid,
    ___,      
    NULL
};

/* End of file. */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -