本文將提供一段完整地生成一幅分形圖像文件的C語言代碼,並且極為簡單.我相信這應該是最簡單的分形圖像生成算法.大部分的分形圖像代碼也都很短,但一有遞歸迭代就難以理解了.而這段代碼則很好懂,並且其生成的圖像會使人意想不到.
#include <iostream> #include <cmath> #include <cstdlib>
#define DIM 1000
void pixel_write(int,int); FILE *fp; int main() { fp = fopen("image.ppm","wb"); if (!fp) { return -1; } fprintf(fp, "P6\n%d %d\n255\n", DIM, DIM); for(int j=0;j<DIM;j++) { for(int i=0;i<DIM;i++) { pixel_write(i,j); } } fclose(fp); return 0; } void pixel_write(int i, int j) { static unsigned char color[3]; float t = j + i*0.001f; memcpy(color, &t, 3); fwrite(color, 1, 3, fp); // 其實更簡單粗爆的方式是 //fwrite(&t, 1, 3, fp);
}
代碼運行完后,會生成一個PPM格式的圖像文件,為:
最簡單的分形圖形應該是康托(Cantor)三分集,只是不停地將線段一分為二.如下圖所示:
該算法生成的圖像很康托三分集有些相似.尤其是它的綠色通道:
將代碼修改下,其分形的效果會更明顯:
void pixel_write(int i, int j) { static unsigned char color[3]; float t = j/4 + i*0.001f; memcpy(color, &t, 3); fwrite(color, 1, 3, fp); }
相關文章:
C語言中將0到1000的浮點數用強制指針類型轉換的方式生成一幅圖像