发几幅由计算机生成的图像,以展示算法之美.并提供生成图像的算法代码.代码中,一部分是由C++实现,另一部分是由一种我定义的脚本语言实现.

相关软件见:Why数学图像生成工具.

(1)树

 1 void            CPixelIFSTree::BuildPixelsMap()
 2 {
 3     float m[5][7]; 
 4 
 5     //'IFS码赋值
 6     m[0][0] = 0.195f;  m[0][1] =-0.488f; m[0][2] = 0.344f; m[0][3] = 0.433f; m[0][4] = 0.4431f; m[0][5] = 0.2452f; m[0][6] = 0.25f;
 7     m[1][0] = 0.462f;  m[1][1] = 0.414f; m[1][2] =-0.252f; m[1][3] = 0.361f; m[1][4] = 0.2511f; m[1][5] = 0.5692f; m[1][6] = 0.25f;
 8     m[2][0] =-0.058f;  m[2][1] =-0.07f;  m[2][2] = 0.453f; m[2][3] =-0.111f; m[2][4] = 0.5976f; m[2][5] = 0.0969f; m[2][6] = 0.25f;
 9     m[3][0] =-0.035f;  m[3][1] = 0.07f;  m[3][2] =-0.469f; m[3][3] =-0.022f; m[3][4] = 0.4884f; m[3][5] = 0.5069f; m[3][6] = 0.2f;
10     m[4][0] =-0.637f;  m[4][1] = 0.0f;   m[4][2] = 0.0f;   m[4][3] = 0.501f; m[4][4] = 0.8562f; m[4][5] = 0.2513f; m[4][6] = 0.05f;
11 
12     float a, b, c, d, e, f;    //'仿射变幻中的系数
13 
14     float x = 0.0f;
15     float y = 0.0f;
16     float t;
17 
18     for (int i = 0; i < 100000000; i++)
19     {
20         float R = (float)rand()/RAND_MAX;
21 
22         if (R <= m[0][6]) 
23         {
24             a = m[0][0]; b = m[0][1]; c = m[0][2]; d = m[0][3]; e = m[0][4]; f = m[0][5];
25         } 
26         else if (R <= m[0][6] + m[1][6]) 
27         {
28             a = m[1][0]; b = m[1][1]; c = m[1][2]; d = m[1][3]; e = m[1][4]; f = m[1][5];
29         } 
30         else if (R <= m[0][6] + m[1][6] + m[2][6]) 
31         {
32             a = m[2][0]; b = m[2][1]; c = m[2][2]; d = m[2][3]; e = m[2][4]; f = m[2][5];
33         } 
34         else if (R <= m[0][6] + m[1][6] + m[2][6] + m[3][6]) 
35         {
36             a = m[3][0]; b = m[3][1]; c = m[3][2]; d = m[3][3]; e = m[3][4]; f = m[3][5];
37         } 
38         else 
39         {
40             a = m[4][0]; b = m[4][1]; c = m[4][2]; d = m[4][3]; e = m[4][4]; f = m[4][5];
41         }
42 
43         t = a*x + b*y + e;
44         y = c*x + d*y + f;
45         x = t;
46 
47         int ix = ((int)(x*1024.0f))&0x3ff;
48         int iy = 1024 - ((int)(y*1024.0f))&0x3ff;
49         m_pixels_map[iy][ix]+=1;
50     }
51 
52     if (!m_pixels_map[0][0])
53     {
54         m_pixels_map[0][0] = 1;
55     }
56 }
57 
58 unsigned int    CPixelIFSTree::CalculatePixel(unsigned int x, unsigned int y)
59 {
60     if (!m_pixels_map[0][0])
61     {
62         BuildPixelsMap();
63     }
64 
65     float fr = logf((float)m_pixels_map[y][x])*32.0f;
66     unsigned int r = FLOAT_255_TO_BYTE(fr);
67     float fg = logf((float)m_pixels_map[y][x]*1.2f)*56.0f;
68     unsigned int g = FLOAT_255_TO_BYTE(fg);
69 
70     unsigned b = m_pixels_map[y][x] & 0xff;
71 
72     return MAKE_RGB(r,g,b);
73 }
View Code

相关文章:

  • 2021-04-15
  • 2022-12-23
  • 2021-09-30
  • 2021-08-08
  • 2021-11-12
  • 2022-12-23
  • 2021-06-04
  • 2021-07-19
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-25
  • 2022-12-23
  • 2021-12-30
相关资源
相似解决方案