色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuà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) 的像素點的顏色值。

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

參賽者編寫的代碼會被插進下面這段程序當中(我做了一些細微的改動),最終會生成一個大小為 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 分形圖形居然可以只用這么一點代碼畫出:


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 集在某處局部放大后的結果

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 變量來控制繪畫的進程,完全沒有用到 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 模型得到的圖片,程序運行起來要耗費不少時間。代碼很有意思:巧妙地利用宏定義,打破了函數(shù)與函數(shù)之間的界限,三段代碼的字數(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 分岔圖。和剛才一樣,對應的代碼也巧妙地利用了宏定義來節(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)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 函數(shù)
    +關注

    關注

    3

    文章

    4344

    瀏覽量

    62864
  • C++
    C++
    +關注

    關注

    22

    文章

    2114

    瀏覽量

    73782
  • 代碼
    +關注

    關注

    30

    文章

    4820

    瀏覽量

    68882

原文標題:這幾行代碼,驚為天人!

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

收藏 人收藏

    評論

    相關推薦

    使用Python進行圖像處理

    下面是一個關于使用Python在幾行代碼中分析城市輪廓線的快速教程。
    的頭像 發(fā)表于 11-07 10:14 ?266次閱讀
    使用Python進行<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

    圖像檢測和圖像識別的原理、方法及應用場景

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

    OpenCV圖像識別C++代碼

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

    圖像處理中的卷積運算

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

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

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

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

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

    為什么GPU對AI如此重要?

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

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

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

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

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

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

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

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

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

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

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

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

    計算機代碼同樣如此。編譯器將編程語言中的復雜指令轉換為等效的CPU 指令。結合功能強大的外部庫,就能通過相對較少的幾行代碼表示包含數(shù)十億條C
    發(fā)表于 02-23 14:11 ?1304次閱讀
    嵌入式底層知識一網(wǎng)打盡,看這篇就夠了!

    圖像放大后,圖像中心顯示在 ,圖像框中心,

    大家好,視覺 顯示 相機圖像時,點擊 放大工具放大后,如何將大圖像的中心 對準圖像顯示框的中心,,
    發(fā)表于 01-24 15:49
    主站蜘蛛池模板: 久久久久琪琪精品色| 成人免费小视频| 欧美牲交A欧美牲交VDO| 国产成人小视频在线观看| 怡红院美国分院一区二区| 天天靠天天擦天天摸| 蜜芽手机在线观看| 交换娇妻呻吟声不停中文字幕| YY6080A旧里番在线观看| 伊人久久大香线蕉综合电影网| 撕开美女的衣服2| 欧美日韩午夜群交多人轮换| 九九在线中文字幕无码| 国产成人a一在线观看| 99精品电影| 在线观看日韩一区| 亚洲精品久久一区二区三区四区 | 少妇无码太爽了视频在线播放| 蜜芽资源高清在线观看| 精品熟女少妇AV久久免费A片| 国产精品成人免费观看| 扒开校花粉嫩小泬喷潮漫画| 中文字幕在线永久| 一本道无码v亚洲| 亚洲免费va在线观看| 卫生间被教官做好爽HH视频| 人人妻免费线| 欧美成人中文字幕在线看| 美女大本营| 蜜桃传媒星空传媒在线播放| 久久久久久久久性潮| 后入式狂顶免费视频| 国产麻豆精品传媒AV国产在线| 俄罗斯搜索引擎Yandex推广入口| china中国gay偷拍| 99蜜桃在线观看免费视频网站| 最新国产麻豆精品| 18禁裸乳无遮挡免费网站 | 337p啪啪人体大胆| 中国农村妇女真实BBWBBWBBW| 一个色夫导航|