Từ 1 tới 7 trên tổng số 7 kết quả

Đề tài: Sơ lược về hình học Fractal

  1. #1
    Ngày gia nhập
    12 2007
    Bài viết
    224

    Mặc định Sơ lược về hình học Fractal

    Hình học fractal là 1 vấn đề rất hay trong đồ hoạ xử lý ảnh .

    Sơ lược về hình học fractal :

    Các đường cong , các hình cầu, các hình trụ,v.v.. được khảo sát kĩ trong các sách giáo khoa về hình học thực ra chỉ là những trường hợp lý tưởng , Thực tế trong thiên nhiên lại tồn tại chủ yếu những hình dạng gồ ghề, gãy góc như đám mây, ngọn núi, bờ biển.
    BENOIT MANDELBROT (Be-no-it Man-đen-brốt) nhà toán học vĩ đại của thế kỉ XX, nói rằng: "Các đám mây không phải là hình cầu, các ngọn núi không phải là hình nón". Và chính ông đã là người đã đề xướng từ " FRACTAL" hơn 20 năm về trước để chỉ các đối tượng có hình dáng gồ ghề, không trơn nhẵn trong tự nhiên.
    Cụ thể hơn, fractal là những vật thể có tính đối xứng sắp xếp trong 1 phạm vi nhất định, có nghĩa là khi ta chia 1 vật thể fractal, với hình dáng gồ ghề, gãy góc ra thành những vật nhỏ, thì mỗi phần nhỏ đó vẫn giữ những đặc tính đối xứng trong 1 cấu trúc tưởng như là hỗn loạn. Hình dáng đám mây, đường đi của các tia chớp là những VD mà chúng ta dễ nhìn thấy được.
    Hình học fractal cho ta thấy vẻ đẹp từ sự sắp xếp, trộn lẫn giữa trật tự và không trật tự.
    Fractal áp dụng trực tiếp cho thế giới tự nhiên, người ta có thể dựa vào hình học fractal để có thể tính toán được, mô phỏng được những hệ phức tạp. Hình học fractal có những ứng dụng phong phú , đa dạng vào rất nhiều lĩnh vực khác nhau, từ các ngành xây dựng, khai thác dầu khí, chế tạo dụng cụ chính xác đến những ứng dụng hiệu quả trong y học, sinh lý học, âm nhạc.v.v..
    Chính hình học fractal đã làm thay đổi cách nhìn của chúng ta về thiên nhiên và thế giới.

    Trong mấy nghìn năm qua chúng ta đã rất quen thuộc với hình học Euclid, môn hinh học giúp chúng ta tìm hiểu, tính toán các hình học thông thường như tam giác , hình tròn, hình vuông,... Hình học Euclid (Ơ-clit) giúp chúng ta trong công việc đo đạc, thiết kế, xây dựng, hay mô tả những cấu trúc phức tạpnhư cấu trúc nguyên tử chẳng hạn... Nhưng hình học Euclid lại không thể giúp chúng ta hình dung những diễn tiến trong các vật thể rất bình thường như bờ biển, đám mây, cây cối, núi đồi, hay chính cá bộ phậntrong cơ thể con người như hệ tiêu hóa, tuần hoàn hay hệ hô hấp...
    Thật ra, các cấu trúc này tuy phức tạp như vậy nhưng cách xây dựng lên chúng lại hết sức đơn giản có khi chỉ là 1 quá trình lặp đi lặp lại 1 qui tắc biến đổi đơn giản nào đó.

    Tài liệu tiếng việt sưu tầm :http://www.mediafire.com/?fmvbti3bwbx

    Một số code sưu tầm minh hoạ cho hình học fractal ( các bạn lưu ý muốn chạy được cần sửa lại đường dẫn trong hàm initgraph và bật chế độ đồ hoạ trong TC hay BC )

    Vẽ đường Dragon

    C Code:
    1. #include <conio.h>
    2. #include <graphics.h>
    3. #include <math.h>
    4.  
    5. /* 1 / sqrt(2) */
    6. #define FCT 0.7071067
    7. /* he so doi tu do sang radian */
    8. #define RADS 0.017453293
    9.  
    10. #define LEFT 0
    11. #define RIGHT 1
    12.  
    13. void Dragons(int dir, double len, int n, int leftright)
    14. {
    15.   if (n>0)
    16.   {
    17.     if (leftright==LEFT)
    18.     {
    19.        dir += 45;
    20.        Dragons(dir, len * FCT, n-1, LEFT);
    21.        dir -= 90;
    22.        Dragons(dir, len * FCT, n-1, RIGHT);
    23.        dir += 45;
    24.     }
    25.     else
    26.     {
    27.        dir -= 45;
    28.        Dragons(dir, len * FCT, n-1, LEFT);
    29.        dir += 90;
    30.        Dragons(dir, len * FCT, n-1, RIGHT);
    31.        dir -= 45;
    32.     }
    33.   }
    34.   else
    35.     linerel(len * cos(RADS * dir), len * sin(RADS * dir));
    36. }
    37.  
    38. void main()
    39. {
    40.   int gr_drive = 0, gr_mode;
    41.   double temp;
    42.  
    43.   initgraph(&gr_drive, &gr_mode,"C:\\BORLANDC\\BGI");
    44.   setcolor(YELLOW);
    45.   rectangle(0, 0, getmaxx(), getmaxy());
    46.  
    47.   moveto(200,150);
    48.   Dragons(0, 300, 16, LEFT);
    49.  
    50.   getch();
    51.   closegraph();
    52. }

    Vẽ cây fractal

    C Code:
    1. #include<stdio.h>
    2. #include<conio.h>
    3. #include<stdlib.h>
    4. #include<graphics.h>
    5. #include<math.h>
    6. #define pi 3.14
    7. #define CLIP_ON 1
    8. int n,c,t,mau;
    9. float hs,go;
    10. //--------------------------------------------------------------------------
    11. int dau()
    12. {
    13.    if (random(2) == 0)
    14.       return -1;
    15.    else
    16.       return 1;
    17. }
    18. //--------------------------------------------------------------------------
    19. void cay(int x,int y,float h,float g,float gw,int k)
    20. {
    21.    int x1,y1,i,j,d,leaf,c;
    22.    float dg,tt;
    23.    if (k > 0)
    24.       for (j = 1; j <= random(t) + t ; j++)
    25.      {
    26.         x1 = x + h * cos(g);
    27.         y1 = y + h * sin(g);
    28.         setcolor(DARKGRAY);
    29.         for (i = 0; i <= (h/35)*(h/35); i++)
    30.            {
    31.           line(x + i, y, x1 + i, y1);
    32.           for (d = 1; d <= (h/5); d++)
    33.              {
    34.             tt = random(1);
    35.             putpixel((1-tt)*x+tt*x1+i,(1-tt)*y+tt*y1,LIGHTGRAY);
    36.              }
    37.            }
    38.         dg = gw/(2*n+1);
    39.         for (i = -n; i <= n; i++)
    40.           if (random(1000)*0.001 > 0.5)
    41.            cay(x1,y1,h*(0.5+(random(1000)*0.001)/3),g+i*dg,gw*hs,k-1);
    42.         x = x1;
    43.         y = y1;
    44.         g = g + M_PI/18;
    45.      }
    46.    else
    47.      {
    48.     setfillstyle(1,random(15));
    49.     setcolor(random(15));
    50.     for (leaf = 1; leaf <= 2; leaf++)
    51.        fillellipse(x+random(8)*dau(),y+random(5)*dau(),random(5)+2,random(2)+1);
    52.     for (leaf = 1; leaf <= 70; leaf++)
    53.        {
    54.           switch (leaf)
    55.         {
    56.            case 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20:
    57.              {
    58.               putpixel(x+random(15)*dau(),y+random(5)*dau(),BLUE);
    59.               break;
    60.              }
    61.            case 21,22,23,24,25:
    62.              {
    63.               putpixel(x+random(15)*dau(),y+random(5)*dau(),LIGHTBLUE);
    64.               break;
    65.              }
    66.            case 26,27,28,29,30,31,32,33,34,35,36,37,38,39
    67.                  ,40,41,42,43,44,45,46,47,48,49:
    68.  
    69.              {
    70.               putpixel(x+random(15)*dau(),y+random(5)*dau(),LIGHTGREEN);
    71.               break;
    72.              }
    73.         }
    74.        }
    75.      }
    76. }
    77. //--------------------------------------------------------------------------
    78. void cloud(int x,int y,float Rx,float Ry,int k)
    79. {
    80.    int i;
    81.    if (k > 0)
    82.      for (i = 1; i <= 5; i++)
    83.     cloud(x+random(Rx),y+random(Ry),Rx*0.8,Ry*0.6,k-1);
    84.    else
    85.      for (i = 1; i <= (sqrt(Rx*Ry)/3.5); i++)
    86.     putpixel(x+random(Rx),y+random(Ry),WHITE);
    87. }
    88. //--------------------------------------------------------------------------
    89. void phong()
    90. {
    91.    int l,i;
    92.    l = (getmaxy() / 7) * 5;
    93.    setfillstyle(1,(mau=random(15)));
    94.    bar(0,0,getmaxx(),l);
    95.    setfillstyle(1,LIGHTGRAY);
    96.    bar(0,l,getmaxx(),getmaxy());
    97.    for (i = 1; i < 20000; i++)
    98.       switch (random(8))
    99.      {
    100.         case 0,1,2,3,4:
    101.           {
    102.         putpixel(random(getmaxx()),l+random(getmaxy()-l),GREEN);
    103.         break;
    104.           }
    105.         case 5,6:
    106.           {
    107.         putpixel(random(getmaxx()),l+random(getmaxy()-l),YELLOW);
    108.         break;
    109.           }
    110.         case 7:
    111.           {
    112.         putpixel(random(getmaxx()),l+random(getmaxy()-l),LIGHTRED);
    113.         break;
    114.           }
    115.      }
    116.    if (mau!=RED)
    117.     {
    118.       if (mau!=BLACK)
    119.      {
    120.        setfillstyle(1,RED);
    121.        setcolor(RED);
    122.      }
    123.     }
    124.    else
    125.      {
    126.        setfillstyle(1,YELLOW);
    127.        setcolor(YELLOW);
    128.      }
    129.    fillellipse(random(getmaxx() / 2)+300,100,30,30);
    130.    for (i = 1; i <= 5; i++)
    131.       cloud(random(getmaxx()),random(150)+10,random(60)+60,random(40)+20,5);
    132. }
    133. //--------------------------------------------------------------------------
    134. void main()
    135. {
    136.    int i,graphdriver,graphmode;
    137.    char ch;
    138.    randomize();
    139.    graphdriver = DETECT; //graphmode;
    140.    initgraph(&graphdriver, &graphmode,"C:\\TC\\BGI");
    141.    setviewport(0,0,getmaxx(),getmaxy(),CLIP_ON);
    142.    do
    143.      {
    144.     n = 1;
    145.     hs = 1.2;
    146.     go = M_PI /2.8;
    147.     t = 2;
    148.     phong();
    149.     cay(((getmaxx()-100) /5)+random(60),(getmaxy()/ 7)*6+random(30)*dau(),getmaxy() / 6,-M_PI/2,go,5);
    150.     ch= getch();
    151.       }while (ch!=27);
    152.    closegraph();
    153. }

    Vẽ núi đồi

    C Code:
    1. /* Tao ra bien dang nui mot cach ngau nhien */
    2. #include  <dos.h>
    3. #include  <conio.h>
    4. #include  <stdlib.h>
    5. #include  <time.h>
    6. #include <graphics.h>
    7.  
    8. void lineseg(int hpos1,int hpos2,int vpos1,int vpos2, int depth, int range);
    9.  
    10. const DEPTH=5;
    11. const RANGE=250;
    12.  
    13. unsigned char *screen;
    14.  
    15. void main(int argc,char *argv[])
    16. {
    17.   int depth, range, key = 0;
    18.   int gr_drive = DETECT, gr_mode;
    19.  
    20.   if (argc<2)
    21.     depth = DEPTH;
    22.   else
    23.     depth = atoi(argv[1]);
    24.  
    25.   if (argc<3)
    26.     range = RANGE;
    27.   else
    28.     range = atoi(argv[2]);
    29.  
    30.   randomize();
    31.   initgraph(&gr_drive, &gr_mode, "");
    32.  
    33.   while( key != 27)
    34.   {
    35.     lineseg(0, getmaxx(), getmaxy() / 2, getmaxy()/2, depth, range);
    36.    
    37.     while(! kbhit());
    38.       key = getch();
    39.       if( key >= '1' && key <= '9')
    40.             depth = (int)(key - '0');
    41.     cleardevice();
    42.   }
    43.   closegraph();
    44. }
    45.  
    46. void lineseg(int hpos1,int hpos2,int vpos1,int vpos2, int depth,int range)
    47. {
    48.   int midvpos;
    49.  
    50.   if (depth<=0)
    51.      line(hpos1,vpos1,hpos2,vpos2);
    52.   else {
    53.     midvpos = (vpos1+vpos2)/2+random(range)-range/2;
    54.     lineseg(hpos1,(hpos1+hpos2)/2,vpos1,midvpos,depth-1,
    55.              range/2);
    56.     lineseg((hpos1+hpos2)/2,hpos2,midvpos,vpos2,depth-1,
    57.              range/2);
    58.   }
    59. }

  2. #2
    Ngày gia nhập
    12 2008
    Bài viết
    22

    Link dl trên died rồi.Bạn có thể up lại đc ko?.Cảm ơn

  3. #3
    Ngày gia nhập
    12 2008
    Nơi ở
    Bình Dương
    Bài viết
    114

    đang đọc, hi vọng sẽ kiếm được chút gì ở bài này! nhưng mà link tài liệu die rồi!
    Đã được chỉnh sửa lần cuối bởi hoangedward : 15-04-2010 lúc 10:37 AM.

  4. #4
    Ngày gia nhập
    11 2007
    Bài viết
    3

    Red face Fractal

    Bạn có tài liệu nào nói về hình học Fractal ko?
    Send len cho mọi người với/
    Thank nhiều...

  5. #5
    Ngày gia nhập
    04 2010
    Bài viết
    23

    các pro giải thích cho e lệnh nay lineseg(0, getmaxx(), getmaxy() / 2, getmaxy()/2, depth, range);
    xin cám ơn!

  6. #6
    Ngày gia nhập
    02 2009
    Bài viết
    35

    Mặc định Sơ lược về hình học Fractal

    em chạy bằng Dev-C++4.9.9.2 thì phải chỉnh sửa thế nào để chương trình chạy đc hả anh
    cám ơn anh trc ^^
    thương dân như con

  7. #7
    Ngày gia nhập
    02 2009
    Bài viết
    35

    mà link down đống tài liệu đó die rồi :((
    thương dân như con

Các đề tài tương tự

  1. Hình học Fractal trên VC++, ai biết chỉ giúp mình với???
    Gửi bởi minh_hut trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 0
    Bài viết cuối: 13-05-2009, 03:50 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn