分形fractal

转载 2012年03月29日 18:29:15
#include "cv.h"
#include "highgui.h"

const int image_w = 100;
const double a =0.0;
const double b =0.0;
const long Nmax = 255; //Z值衰减(趋向于零) 的临界
const double Rmax = 20; // Z值没有界限地增加(趋向无穷)的临界

IplImage* image =0;
int c_r_value = 60;
int c_i_value = 40;

//返回迭代的次数
int getnum(int i,int j)
{
    double C_RealPart = (double)(c_r_value-50)/100*2*2; //-2 到 +2 //Julia 集合 常数C
    double C_ImagPart = (double)(c_i_value-50)/100*2*2; // -2 到 +2 //Julia 集合 常数C
    double RealPart = (double)i/image_w+a; 
    double ImagPart = (double)j/image_w+b;
    int n=0;
    while(n<Nmax)
    {
        //Z=Z*Z+C;
        double ZM = RealPart*RealPart + ImagPart*ImagPart;
        if(ZM>Rmax) break;
        double temp_RealPart = RealPart*RealPart - ImagPart*ImagPart+C_RealPart;
        double temp_ImagPart = 2*ImagPart*RealPart+C_ImagPart;
        RealPart= temp_RealPart;
        ImagPart= temp_ImagPart; 
        n++;
    }
    return n;
}
void onChangeimg(int pos)
{
    cvZero(image);
    for(int i =0;i<image_w;i++)
        for(int j =0;j<image_w;j++)
        {
            int n1 = getnum(i,j);
            int n2 = getnum(j,i);
            int n3 = getnum(j,i/2);
            //printf("%d,",n);

            CvScalar sc1;
            if(n1>Nmax-2) n1=0;
            if(n2>Nmax-2) n2=0;
            if(n3>Nmax-2) n3=0;

            sc1.val[0] = (int)abs(255*(float)n1/Nmax);
            sc1.val[1] = (int)abs(255*(float)n2/Nmax);
            sc1.val[2] = (int)abs(255*(float)n3/Nmax);
            cvSet2D(image,i,j,sc1);

        }

    double nvalue = cvNorm(image,0,CV_C);

    for(int i =0;i<image_w;i++)
        for(int j =0;j<image_w;j++)
        {
            CvScalar sc1;
            CvScalar sc2 =cvGet2D(image,i,j);
            sc1.val[0] = (int)abs(255*sc2.val[0]/nvalue);
            sc1.val[1] = (int)abs(255*sc2.val[1]/nvalue);;
            sc1.val[2] = (int)abs(255*sc2.val[2]/nvalue);;
            cvSet2D(image,i,j,sc1);
        }

}
int main( int argc, char** argv )
{

    cvNamedWindow( "WIN", 0 );
    cvCreateTrackbar( "C real", "WIN", &c_r_value, 100, onChangeimg );
    cvCreateTrackbar( "C imag", "WIN", &c_i_value, 100, onChangeimg );

    image = cvCreateImage( cvSize(image_w,image_w), 8, 3 );
    onChangeimg(0);

    for(;;)
    {

    cvShowImage("WIN",image);
    if(cvWaitKey(40)==27) break;
    }
    return 0;

} 
 

相关文章推荐

fractal dimensions分形维数计算

  • 2014年02月12日 16:57
  • 1.99MB
  • 下载

分形图(fractal pictures)

多图多图多图多图!!!githubShow末端二分分形树 失败的程序有另一种感觉 分形龙 Koch雪花带4个树枝的分形树 自己种的柏树 被风吹成这样了 谢尔宾斯基三角形(Sierpinski...

POJ 2083 Fractal (分形&分治)

Fractal http://poj.org/problem?id=2083 Time Limit: 1000MS Memory Limit: 30000K Description ...

poj 2083 Fractal 分形基本方法( 总结) 递归

思路:分形题目,同一个操作,一般都用递归 分形题目思路:(1)首先确定一个坐标或多个坐标,视题目而定,这几个坐标是可以确定一个最小或者次小图形的;                           ...

Fractal (分形)

A fractal is an object or quantity that displays self-similarity, in a somewhat technical sense, on ...

poj2038Fractal盒分形深搜递归

Description A fractal is an object or quantity that displays self-similarity, in a somewhat techn...
  • a716121
  • a716121
  • 2015年08月20日 19:18
  • 471

递归算法——BOX FRACTAL 盒分形(POJ2083)

问题盒分形定义如下: 1度的盒分形为: X 2度的盒分形为: X X X X X如果B(n-1)表示n-1度的盒分形,则n度的盒分形递归定义如下:B(n-1) B(...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:分形fractal
举报原因:
原因补充:

(最多只允许输入30个字)