在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

短短幾行代碼,就能畫出如此絢爛的圖像

Q4MP_gh_c472c21 ? 來源:C語言與CPP編程 ? 作者:C語言與CPP編程 ? 2022-05-16 15:34 ? 次閱讀

事情是這么一回事:

國外有個大佬在StackExchange上發(fā)起了一個叫做Tweetable Mathematical Art的比賽。

參賽者需要用C++編寫代表三原色的RD、GR、BL三個函數(shù),每個函數(shù)都不能超過140個字符。每個函數(shù)都會接到 i 和 j 兩個整型參數(shù)(0 ≤ i, j ≤ 1023),然后需要返回一個 0 到 255 之間的整數(shù),表示位于 (i, j) 的像素點(diǎn)的顏色值。

舉個例子,如果 RD(0, 0) 和 GR(0, 0) 返回的都是 0 ,但 BL(0, 0) 返回的是 255 ,那么圖像的最左上角那個像素就是藍(lán)色。

參賽者編寫的代碼會被插進(jìn)下面這段程序當(dāng)中(我做了一些細(xì)微的改動),最終會生成一個大小為 1024×1024 的圖片。



//NOTE:compilewithg++filename.cpp-std=c++11
#include #include #include #define DIM 1024#define DM1 (DIM-1)#define _sq(x) ((x)*(x)) // square#define _cb(x) abs((x)*(x)*(x)) // absolute value of cube#define _cr(x) (unsigned char)(pow((x),1.0/3.0)) // cube root
unsigned char GR(int,int);unsigned char BL(int,int);
unsigned char RD(int i,int j){// YOUR CODE HERE}unsigned char GR(int i,int j){// YOUR CODE HERE}unsigned char BL(int i,int j){// YOUR CODE HERE}
void pixel_write(int,int);FILE *fp;int main(){fp = fopen("MathPic.ppm","wb");fprintf(fp, "P6
%d %d
255
", DIM, DIM);for(int j=0;jfor(int i=0;ipixel_write(i,j);fclose(fp);return 0;}void pixel_write(int i, int j){static unsigned char color[3];color[0] = RD(i,j)&255;color[1] = GR(i,j)&255;color[2] = BL(i,j)&255;fwrite(color, 1, 3, fp);}

我選了一些自己比較喜歡的作品,放在下面和大家分享。首先是一個來自 Martin Büttner 的作品:

8fdfe1fe-d4ce-11ec-bce3-dac502259ad0.jpg

它的代碼如下:


unsigned char RD(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2))*255);}
unsigned char GR(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);}
unsigned char BL(int i,int j){return (char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);}

同樣是來自 Martin Büttner 的作品

903b258c-d4ce-11ec-bce3-dac502259ad0.jpg

這是目前暫時排名第一的作品。它的代碼如下:


unsigned char RD(int i,int j){#define r(n)(rand()%n)static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):RD((i+r(2))%1024,(j+r(2))%1024):c[i][j];}
unsigned char GR(int i,int j){static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):GR((i+r(2))%1024,(j+r(2))%1024):c[i][j];}
unsigned char BL(int i,int j){static char c[1024][1024];return!c[i][j]?c[i][j]=!r(999)?r(256):BL((i+r(2))%1024,(j+r(2))%1024):c[i][j];}

下面這張圖片仍然出自 Martin Büttner 之手

904e5940-d4ce-11ec-bce3-dac502259ad0.jpg

難以想象, Mandelbrot 分形圖形居然可以只用這么一點(diǎn)代碼畫出:


unsigned char RD(int i,int j){float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return log(k)*47;}
unsigned char GR(int i,int j){float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return log(k)*47;}
unsigned char BL(int i,int j){float x=0,y=0;int k;for(k=0;k++<256;){float a=x*x-y*y+(i-768.0)/512;y=2*x*y+(j-512.0)/512;x=a;if(x*x+y*y>4)break;}return 128-log(k)*23;}

Manuel Kasten 也制作了一個 Mandelbrot 集的圖片,與剛才不同的是,該圖描繪的是 Mandelbrot 集在某處局部放大后的結(jié)果

90844e24-d4ce-11ec-bce3-dac502259ad0.jpg

它的代碼如下:

unsigned char RD(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,3.);}
unsigned char GR(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,.7);}
unsigned char BL(int i,int j){double a=0,b=0,c,d,n=0;while((c=a*a)+(d=b*b)<4&&n++<880){b=2*a*b+j*8e-9-.645411;a=c-d+i*8e-9+.356888;}return 255*pow((n-80)/800,.5);}

這是 Manuel Kasten 的另一作品

90979560-d4ce-11ec-bce3-dac502259ad0.jpg

生成這張圖片的代碼很有意思:函數(shù)依靠 static 變量來控制繪畫的進(jìn)程,完全沒有用到 i 和 j 這兩個參數(shù)!


unsigned char RD(int i,int j){static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;}
unsigned char GR(int i,int j){static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;}
unsigned char BL(int i,int j){static double k;k+=rand()/1./RAND_MAX;int l=k;l%=512;return l>255?511-l:l;}

這是來自 githubphagocyte 的作品

90aa7842-d4ce-11ec-bce3-dac502259ad0.jpg

它的代碼如下:


unsigned char RD(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int((i+DIM)*s+y)%2+int((DIM*2-i)*s+y)%2)*127;}
unsigned char GR(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int(5*((i+DIM)*s+y))%2+int(5*((DIM*2-i)*s+y))%2)*127;}
unsigned char BL(int i,int j){float s=3./(j+99);float y=(j+sin((i*i+_sq(j-700)*5)/100./DIM)*35)*s;return (int(29*((i+DIM)*s+y))%2+int(29*((DIM*2-i)*s+y))%2)*127;}

這是來自 githubphagocyte 的另一個作品

91141db0-d4ce-11ec-bce3-dac502259ad0.jpg

這是一張使用 diffusion-limited aggregation 模型得到的圖片,程序運(yùn)行起來要耗費(fèi)不少時間。代碼很有意思:巧妙地利用宏定義,打破了函數(shù)與函數(shù)之間的界限,三段代碼的字?jǐn)?shù)限制便能合在一起使用了。


unsigned char RD(int i,int j){#define D DIM#define M m[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]#define R rand()%D#define B m[x][y]return(i+j)?256-(BL(i,j))/2:0;}
unsigned char GR(int i,int j){#define A static int m[D][D],e,x,y,d,c[4],f,n;if(i+j<1){for(d=D*D;d;d--){m[d%D][d/D]=d%6?0:rand()%2000?1:255;}for(n=1return RD(i,j);}
unsigned char BL(int i,int j){A;n;n++){x=R;y=R;if(B==1){f=1;for(d=0;d<4;d++){c[d]=M;f=fif(f>2){B=f-1;}else{++e%=4;d=e;if(!c[e]){B=0;M=1;}}}}}return m[i][j];}

最后這張圖來自 Eric Tressler

914fa22c-d4ce-11ec-bce3-dac502259ad0.jpg

這是由 logistic 映射得到的 Feigenbaum 分岔圖。和剛才一樣,對應(yīng)的代碼也巧妙地利用了宏定義來節(jié)省字符:


unsigned char RD(int i,int j){#define A float a=0,b,k,r,x#define B int e,o#define C(x) x>255?255:x#define R return#define D DIMR BL(i,j)*(D-i)/D;}
unsigned char GR(int i,int j){#define E DM1#define F static float#define G for(#define H r=a*1.6/D+2.4;x=1.0001*b/DR BL(i,j)*(D-j/2)/D;}
unsigned char BL(int i,int j){F c[D][D];if(i+j<1){A;B;G;a0.1){G b=0;b0;k1-x);if(k>D/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}R C(c[j][i])*i/D;}

怎么樣,短短幾行代碼,就能畫出如此絢爛的圖像,你有沒有什么腦洞大開的想法?

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4350

    瀏覽量

    63044
  • C++
    C++
    +關(guān)注

    關(guān)注

    22

    文章

    2114

    瀏覽量

    73923
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4841

    瀏覽量

    69180

原文標(biāo)題:這幾行代碼,驚為天人!

文章出處:【微信號:gh_c472c2199c88,微信公眾號:嵌入式微處理器】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    百問FB顯示開發(fā)圖像處理 - BMP圖像處理

    BMP格式中正向圖像是以圖片的左下角為數(shù)據(jù)首地址的。因此在進(jìn)行數(shù)據(jù)轉(zhuǎn)化時還需要注意坐標(biāo)的變換。 代碼清單2.1實(shí)現(xiàn)了將24位真彩色的BMP圖像轉(zhuǎn)化為RGB格式 代碼清單2.1 1.
    發(fā)表于 11-28 13:52

    使用Python進(jìn)行圖像處理

    下面是一個關(guān)于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?293次閱讀
    使用Python進(jìn)行<b class='flag-5'>圖像</b>處理

    請問PurePath Studio畫出來的程序怎么下到Mini DSP里?

    PurePath Studio 畫出來的程序怎么下到Mini DSP里?還有我想請問一下,PurePath Studio 里面的均衡 及動態(tài)控制程序模塊能不能支持參數(shù)在線可調(diào)? 如果可以,怎么控制?
    發(fā)表于 10-23 08:11

    圖像檢測和圖像識別的原理、方法及應(yīng)用場景

    圖像檢測和圖像識別是計算機(jī)視覺領(lǐng)域的兩個重要概念,它們在許多應(yīng)用場景中發(fā)揮著關(guān)鍵作用。 1. 定義 1.1 圖像檢測 圖像檢測(Object Detection)是指在
    的頭像 發(fā)表于 07-16 11:19 ?5031次閱讀

    OpenCV圖像識別C++代碼

    的頭文件 在您的C++代碼中,包含以下必要的頭文件: # include # include # include # include # include # include # include 讀取圖像
    的頭像 發(fā)表于 07-16 10:42 ?2549次閱讀

    圖像處理中的卷積運(yùn)算

    卷積運(yùn)算是圖像處理中一種極其重要的操作,廣泛應(yīng)用于圖像濾波、邊緣檢測、特征提取等多個方面。它基于一個核(或稱為卷積核、濾波器)與圖像進(jìn)行相乘并求和的過程,通過這一操作可以實(shí)現(xiàn)對圖像的平
    的頭像 發(fā)表于 07-11 15:15 ?2743次閱讀

    用touchgfx生成了代碼,也能編譯成功,但下載之后無法顯示圖像是什么原因?

    我用touchgfx生成了代碼,也能編譯成功,但下載之后無法顯示圖像,可能是什么原因?
    發(fā)表于 07-03 08:19

    DSP教學(xué)實(shí)驗箱_數(shù)字圖像處理_操作教程:5-1 圖像旋轉(zhuǎn)

    的坐標(biāo)要經(jīng)過復(fù)雜的數(shù)學(xué)運(yùn)算得出。而且圖像在經(jīng)過旋轉(zhuǎn)變換后,其寬度和高度都要發(fā)生變化,所以原始圖像的中心點(diǎn)和輸出圖像的中心點(diǎn)的坐標(biāo)是不同的。 圖像的旋轉(zhuǎn)不再是由一個矩陣變換
    發(fā)表于 06-14 14:03

    為什么GPU對AI如此重要?

    GPU在人工智能中相當(dāng)于稀土金屬,甚至黃金,它們在當(dāng)今生成式人工智能時代中的作用不可或缺。那么,為什么GPU在人工智能發(fā)展中如此重要呢?什么是GPU圖形處理器(GPU)是一種通常用于進(jìn)行快速數(shù)學(xué)計算
    的頭像 發(fā)表于 05-17 08:27 ?827次閱讀
    為什么GPU對AI<b class='flag-5'>如此</b>重要?

    思特威發(fā)布超小尺寸CMOS圖像傳感器SC020HGS

    在智能穿戴設(shè)備領(lǐng)域,微型化、高性能的圖像傳感器需求日益增加。思特威(SmartSens,股票代碼688213),一家技術(shù)領(lǐng)先的CMOS圖像傳感器供應(yīng)商,近日發(fā)布了全新0.16MP超小尺寸背照式全局快門CMOS
    的頭像 發(fā)表于 05-11 15:29 ?1228次閱讀

    NVIDIA Instant NeRF將多組靜態(tài)圖像變?yōu)?D數(shù)字場景

    想象一幅風(fēng)光旖旎的畫面,比如水畔的懸崖峭壁。即便只是 2D 圖像如此美景依舊令人心馳神往。如果同一畫面能以 3D 效果展現(xiàn),那么無需跋涉就能身臨其境。
    的頭像 發(fā)表于 05-07 09:15 ?473次閱讀

    KOALA人工智能圖像生成模型問世

    近日,韓國科學(xué)團(tuán)隊宣布研發(fā)出名為 KOALA 的新型人工智能圖像生成模型,該模型在速度和質(zhì)量上均實(shí)現(xiàn)了顯著突破。KOALA 能夠在短短 2 秒內(nèi)生成高質(zhì)量圖片,同時大幅降低了對硬件的需求,為圖像生成領(lǐng)域帶來了全新的可能性。
    的頭像 發(fā)表于 03-05 10:46 ?858次閱讀

    cx3初始化GPIO會停止UVC枚舉的原因?

    我需要使用 GPIO 為我的圖像傳感器和其他設(shè)備進(jìn)行重置控制。 為此,我正在嘗試在我的 CSI 生成的代碼中添加簡單的 GPIO 控制,但是當(dāng)我添加以下幾行時,我的設(shè)備不再枚舉為 UVC 設(shè)備或任何
    發(fā)表于 02-27 07:38

    結(jié)構(gòu)體嵌入共聯(lián)體在協(xié)議解析中的技術(shù)性操作過程

    問到了共聯(lián)體類型強(qiáng)制轉(zhuǎn)化的問題,當(dāng)時bug菌點(diǎn)開看到這幾行代碼便產(chǎn)生了莫名的親切感,或許這些就是C語言的魅力所在吧。
    的頭像 發(fā)表于 02-25 15:00 ?546次閱讀
    結(jié)構(gòu)體嵌入共聯(lián)體在協(xié)議解析中的技術(shù)性操作過程

    嵌入式底層知識一網(wǎng)打盡,看這篇就夠了!

    計算機(jī)代碼同樣如此。編譯器將編程語言中的復(fù)雜指令轉(zhuǎn)換為等效的CPU 指令。結(jié)合功能強(qiáng)大的外部庫,就能通過相對較少的幾行代碼表示包含數(shù)十億條C
    發(fā)表于 02-23 14:11 ?1350次閱讀
    嵌入式底層知識一網(wǎng)打盡,看這篇就夠了!
    主站蜘蛛池模板: 免费精品视频在线 | 午夜精品福利在线观看 | 久久久夜 | 色五月激情小说 | 一区二区三区高清在线观看 | 亚洲综合色dddd26 | 成人啪啪免费视频 | 性感美女视频黄.免费网站 性高清 | 久久久久久9 | 操操干| 三区在线观看 | 91极品视频在线观看 | 日韩特黄特色大片免费视频 | 五月天色网址 | 欧美一区中文字幕 | 成人一级视频 | 网色 | 黄色一及毛片 | 国产盗摄女子私密保健视频 | 伊人涩 | 色天使色婷婷丁香久久综合 | 999影院成 人在线影院 | 天天操天天干天天插 | 国产午夜精品久久久久 | 精品国产污污免费网站入口 | 欧美另类图片亚洲偷 | 一级毛片在线不卡直接观看 | 亚洲乱码一区二区三区在线观看 | 天天操夜夜艹 | 色在线视频免费 | 亚洲精品视频在线 | 97影院午夜在线观看视频 | 国模私拍在线视频 | 色女人久久 | 欧美成人免费观看bbb | 免费观看欧美一级高清 | 男人的天堂免费网站 | 天天干天天色天天干 | 日本一道dvd在线中文字幕 | 国产色爽免费视频 | 九色综合久久综合欧美97 |