文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>一个绳线运动模拟程序

一个绳线运动模拟程序

时间:2011-03-24  来源:pixels

今天开始看PDE,看到一个绳线运动方程, 于是利用该方程了一个解来模拟一下

绳线的运动,效果如下:

 

代码如下:

void DrawString(IplImage *image, double t)
{
    if(!image)
        return;
    cvSet(image, cvScalarAll(250));

    int sampleCount = image->width/2;
    int marginalX   = (image->width - sampleCount)/2;
    int marginalY   = image->height/2;
    int scale       = 100;
    int lineWidth = 2;

    // draw ends
    double y = sin(CV_PI*0/sampleCount)*cos(CV_PI*t)*scale + marginalY;
    cvCircle(image, cvPoint(0+marginalX, y), lineWidth, CV_RGB(0, 250, 0),
        3, CV_AA);
    y = sin(CV_PI*sampleCount/sampleCount)*cos(CV_PI*t)*scale + marginalY;
    cvCircle(image, cvPoint(sampleCount+marginalX, y), 3, CV_RGB(0, 250, 0),
        lineWidth, CV_AA);

    for(int x = 0; x <= sampleCount; ++x)
    {
        y = ( sin(CV_PI*x/sampleCount)*cos(CV_PI*t)       - 
            0.5*sin(2*CV_PI*x/sampleCount)*cos(2*CV_PI*t) + 
            0.33333333*sin(3*CV_PI*x/sampleCount)*cos(3*CV_PI*t) )*scale + marginalY;

        cvLine(image, cvPoint(x+marginalX, y), cvPoint(x+marginalX, y), 
            CV_RGB(250, 0, 0), 2, CV_AA);                
    }
}
int main(int argc, char* argv[]) 
{
    
    IplImage *image = cvCreateImage(cvSize(800, 600), 8, 3);
    DrawCoordinate(image);
    double tstep = 0.01;
    double t = 0;
    cvNamedWindow("Canvas", 1);
    while(true)
    {
        DrawString(image, t);
        cvShowImage("Canvas", image);
        char key = cvWaitKey(33);
        if(key > 0)
            break;
        t += tstep;
    }
    return 0;

相关阅读 更多 +
排行榜 更多 +
打螺丝高手

打螺丝高手

模拟经营 下载
解救火柴人计划安卓版

解救火柴人计划安卓版

体育竞技 下载
鸡生化精英安卓版

鸡生化精英安卓版

飞行射击 下载