📄 acontourcollection.cpp
字号:
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 + -