91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如果讓程序自動(dòng)來(lái)填寫(xiě)每一個(gè)像素點(diǎn),最后會(huì)是一副什么畫(huà)呢?

Android編程精選 ? 來(lái)源:小林coding ? 作者:燒茄子 ? 2022-04-13 14:59 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Hi,大家好。

我們知道,在計(jì)算機(jī)中要顯示顏色,一般都是用R、G、B三個(gè)0-255范圍內(nèi)的整數(shù)來(lái)描述。

89413620-ba77-11ec-aa7f-dac502259ad0.png

這一點(diǎn),即便你不是從事前端、客戶端這些與界面交互相關(guān)的開(kāi)發(fā)工作,也應(yīng)該知道。

也就是說(shuō),你現(xiàn)在在屏幕上看到的任何一個(gè)像素點(diǎn)的顏色,都可以用RGB三個(gè)整數(shù)值來(lái)表示。

那就有一個(gè)有趣的問(wèn)題:如果讓程序自動(dòng)來(lái)填寫(xiě)每一個(gè)像素點(diǎn),最后會(huì)是一副什么畫(huà)呢?

最近我在知乎就看到了這么一個(gè)有趣的話題,看完真的讓人稱奇,獨(dú)樂(lè)樂(lè)不如眾樂(lè)樂(lè),分享給大家。

事情是這么一回事:

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

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

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

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

//NOTE:compilewithg++filename.cpp-std=c++11
#include
#include
#include
#defineDIM1024
#defineDM1(DIM-1)
#define_sq(x)((x)*(x))//square
#define_cb(x)abs((x)*(x)*(x))//absolutevalueofcube
#define_cr(x)(unsignedchar)(pow((x),1.0/3.0))//cuberoot

unsignedcharGR(int,int);
unsignedcharBL(int,int);

unsignedcharRD(inti,intj){
//YOURCODEHERE
}
unsignedcharGR(inti,intj){
//YOURCODEHERE
}
unsignedcharBL(inti,intj){
//YOURCODEHERE
}

voidpixel_write(int,int);
FILE*fp;
intmain(){
fp=fopen("MathPic.ppm","wb");
fprintf(fp,"P6
%d%d
255
",DIM,DIM);
for(intj=0;jfor(inti=0;ireturn0;
}
voidpixel_write(inti,intj){
staticunsignedcharcolor[3];
color[0]=RD(i,j)&255;
color[1]=GR(i,j)&255;
color[2]=BL(i,j)&255;
fwrite(color,1,3,fp);
}

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

8950cdba-ba77-11ec-aa7f-dac502259ad0.jpg

它的代碼如下:

unsignedcharRD(inti,intj){
return(char)(_sq(cos(atan2(j-512,i-512)/2))*255);
}

unsignedcharGR(inti,intj){
return(char)(_sq(cos(atan2(j-512,i-512)/2-2*acos(-1)/3))*255);
}

unsignedcharBL(inti,intj){
return(char)(_sq(cos(atan2(j-512,i-512)/2+2*acos(-1)/3))*255);
}

同樣是來(lái)自 Martin Büttner 的作品:

895d3dde-ba77-11ec-aa7f-dac502259ad0.jpg

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

unsignedcharRD(inti,intj){
#definer(n)(rand()%n)
staticcharc[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];
}

unsignedcharGR(inti,intj){
staticcharc[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];
}

unsignedcharBL(inti,intj){
staticcharc[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 之手:

896ae57e-ba77-11ec-aa7f-dac502259ad0.jpg

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

unsignedcharRD(inti,intj){
floatx=0,y=0;intk;for(k=0;k++<256;){floata=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;}
returnlog(k)*47;
}

unsignedcharGR(inti,intj){
floatx=0,y=0;intk;for(k=0;k++<256;){floata=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;}
returnlog(k)*47;
}

unsignedcharBL(inti,intj){
floatx=0,y=0;intk;for(k=0;k++<256;){floata=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;}
return128-log(k)*23;
}

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

897933f4-ba77-11ec-aa7f-dac502259ad0.jpg

它的代碼如下:

unsignedcharRD(inti,intj){
doublea=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;}
return255*pow((n-80)/800,3.);
}

unsignedcharGR(inti,intj){
doublea=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;}
return255*pow((n-80)/800,.7);
}

unsignedcharBL(inti,intj){
doublea=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;}
return255*pow((n-80)/800,.5);
}

這是 Manuel Kasten 的另一作品:

89866c22-ba77-11ec-aa7f-dac502259ad0.jpg

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

unsignedcharRD(inti,intj){
staticdoublek;k+=rand()/1./RAND_MAX;intl=k;l%=512;returnl>255?511-l:l;
}

unsignedcharGR(inti,intj){
staticdoublek;k+=rand()/1./RAND_MAX;intl=k;l%=512;returnl>255?511-l:l;
}

unsignedcharBL(inti,intj){
staticdoublek;k+=rand()/1./RAND_MAX;intl=k;l%=512;returnl>255?511-l:l;
}

這是來(lái)自 githubphagocyte 的作品:

8993b03a-ba77-11ec-aa7f-dac502259ad0.jpg

它的代碼如下:

unsignedcharRD(inti,intj){
floats=3./(j+99);
floaty=(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;
}

unsignedcharGR(inti,intj){
floats=3./(j+99);
floaty=(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;
}

unsignedcharBL(inti,intj){
floats=3./(j+99);
floaty=(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;
}

這是來(lái)自 githubphagocyte 的另一個(gè)作品:

89a4472e-ba77-11ec-aa7f-dac502259ad0.jpg

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

unsignedcharRD(inti,intj){
#defineDDIM
#defineMm[(x+D+(d==0)-(d==2))%D][(y+D+(d==1)-(d==3))%D]
#defineRrand()%D
#defineBm[x][y]
return(i+j)?256-(BL(i,j))/2:0;
}

unsignedcharGR(inti,intj){
#defineAstaticintm[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=1
returnRD(i,j);
}

unsignedcharBL(inti,intj){
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;}}}}}returnm[i][j];
}

最后這張圖來(lái)自 Eric Tressler:

89b672b4-ba77-11ec-aa7f-dac502259ad0.jpg

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

unsignedcharRD(inti,intj){
#defineAfloata=0,b,k,r,x
#defineBinte,o
#defineC(x)x>255?255:x
#defineRreturn
#defineDDIM
RBL(i,j)*(D-i)/D;
}

unsignedcharGR(inti,intj){
#defineEDM1
#defineFstaticfloat
#defineGfor(
#defineHr=a*1.6/D+2.4;x=1.0001*b/D
RBL(i,j)*(D-j/2)/D;
}

unsignedcharBL(inti,intj){
Fc[D][D];if(i+j<1){A;B;G;a0.1){Gb=0;b0;k1-x);if(k>D/2){e=a;o=(E*x);c[e][o]+=0.01;}}}}}RC(c[j][i])*i/D;
}

怎么樣,短短幾行代碼,就能畫(huà)出如此絢爛的圖像,你有沒(méi)有什么腦洞大開(kāi)的想法,可以復(fù)制上面的代碼來(lái)試一試啊!

-End-

審核編輯 :李倩


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

    關(guān)注

    3

    文章

    4419

    瀏覽量

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

    關(guān)注

    22

    文章

    2124

    瀏覽量

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

    關(guān)注

    30

    文章

    4972

    瀏覽量

    74083

原文標(biāo)題:這幾行代碼,真的騷!

文章出處:【微信號(hào):AndroidPush,微信公眾號(hào):Android編程精選】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    占用網(wǎng)絡(luò)是怎么自動(dòng)駕駛識(shí)別異形障礙物的?

    感知系統(tǒng)對(duì)于自動(dòng)駕駛來(lái)說(shuō),就像是眼睛和翻譯官的角色。這套系統(tǒng)不僅要捕捉到周圍環(huán)境的光影信號(hào),更需要將這些支離破碎的像素點(diǎn)轉(zhuǎn)化為計(jì)算機(jī)能夠理解的物理實(shí)體。
    的頭像 發(fā)表于 03-14 13:46 ?1904次閱讀
    占用網(wǎng)絡(luò)是怎么<b class='flag-5'>讓</b><b class='flag-5'>自動(dòng)</b>駕駛識(shí)別異形障礙物的?

    GD32 usbcdc單片機(jī)從機(jī)只發(fā)送,串口打開(kāi)第自動(dòng)發(fā)最后次測(cè)量的值

    關(guān)閉串口,測(cè)量會(huì)兒(還在發(fā)送值),關(guān)閉測(cè)量(不發(fā)值),此時(shí)打開(kāi)串口,按理來(lái)說(shuō)應(yīng)該沒(méi)有值,但是會(huì)保留最后次測(cè)量的發(fā)送值,這個(gè)過(guò)程完全沒(méi)有receive(如果是PC主機(jī)發(fā)單片機(jī)回應(yīng),這
    發(fā)表于 02-04 10:24

    指針難學(xué)的4點(diǎn)原因分析

    星號(hào),就可以將整數(shù)1放在0x12345678這塊內(nèi)存中了。此時(shí),指針p借助自己的值(0x12345678)指向了個(gè)值(1)。 呵呵,借址讀(寫(xiě))值,已經(jīng)人暈了。 難點(diǎn)4. 鏈表結(jié)點(diǎn) 如果
    發(fā)表于 01-16 06:12

    基于STM32F103C8T6驅(qū)動(dòng)WS2812彩燈模塊點(diǎn)亮RGB燈

    、WS2812模塊簡(jiǎn)介 WS2812是個(gè)集控制電路與發(fā)光電路于體的智能外控LED光源。其外型與個(gè)
    的頭像 發(fā)表于 12-04 11:29 ?6713次閱讀
    基于STM32F103C8T6驅(qū)動(dòng)WS2812彩燈模塊點(diǎn)亮RGB燈

    系統(tǒng)調(diào)用和API有什么區(qū)別?

    到這一點(diǎn)?很簡(jiǎn)單實(shí)際上就是賦予不同的人不同的權(quán)限,只有銀行工作人員才有權(quán)限進(jìn)出金庫(kù)、存取現(xiàn)金,普通人如果進(jìn)入金庫(kù)是會(huì)觸發(fā)報(bào)警的,也就是說(shuō)普通人沒(méi)有權(quán)限來(lái)進(jìn)出金庫(kù)。 實(shí)際上計(jì)算機(jī)中的
    發(fā)表于 12-03 06:52

    自動(dòng)駕駛模型是如何“看”懂點(diǎn)云信息的?

    [首發(fā)于智駕最前沿微信公眾號(hào)]在自動(dòng)駕駛中,點(diǎn)云是個(gè)非常重要的感知信號(hào),如激光雷達(dá)(LiDAR)生成的點(diǎn)云,其實(shí)就是三維空間里
    的頭像 發(fā)表于 11-29 10:25 ?1940次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛模型是如何“看”懂<b class='flag-5'>點(diǎn)</b>云信息的?

    目標(biāo)追蹤的簡(jiǎn)易實(shí)現(xiàn):模板匹配

    絕對(duì)值、把 2500 個(gè)絕對(duì)值加到起才得到最終的 SAD 值,這樣的計(jì)算過(guò)程太過(guò)繁瑣。另外,假如每幀的圖像都存放在內(nèi)存中,那么每次遍歷都需要額外從內(nèi)存中讀入
    發(fā)表于 10-28 07:21

    基于FPGA的膚色檢測(cè)方案簡(jiǎn)介

    順序構(gòu)建3*3方塊矩陣,然后對(duì)矩陣中的像素點(diǎn)進(jìn)行運(yùn)算,對(duì)于腐蝕操作就是“與”,對(duì)于膨脹操作就是“或”。在vivado中,可以使用shift RAM來(lái)構(gòu)建方塊矩陣。shift RAM的深度設(shè)置為圖像
    發(fā)表于 10-28 07:07

    OV5640通信協(xié)議解讀

    數(shù)據(jù),在RGB565格式中,只有高8位是有效的。 tPclk:個(gè)時(shí)鐘周期 。 tp:個(gè)像素點(diǎn)的周期,在RGB565和YUV422輸出格式
    發(fā)表于 10-21 15:07

    OV5640傳輸協(xié)議介紹

    數(shù)據(jù),在RGB565格式中,只有高8位是有效的。 tPclk:個(gè)時(shí)鐘周期 。 tp:個(gè)像素點(diǎn)的周期,在RGB565和YUV422輸出格式
    發(fā)表于 10-21 12:11

    請(qǐng)問(wèn)各位大神,我要用個(gè)串口控制12臺(tái)串聯(lián)的氣體流量計(jì),想要做好一點(diǎn)該怎么修改程序

    臺(tái)機(jī)器的讀操作都放在順序平鋪結(jié)構(gòu)里面了,然后前面板就是次只能讀臺(tái)機(jī)器的流量,此時(shí)如果我要執(zhí)行寫(xiě)操作,比如寫(xiě)設(shè)定流量值的大小,我就只能在讀相鄰機(jī)器的流量之間加一個(gè)時(shí)間延時(shí),這樣
    發(fā)表于 09-30 11:13

    請(qǐng)問(wèn)cyw920719b2q40evb如何設(shè)置每一個(gè)藍(lán)牙芯片的mac地址不樣?

    請(qǐng)問(wèn)下 cyw920719b2q40evb 如何設(shè)置每一個(gè)藍(lán)牙芯片的mac地址不? 謝謝
    發(fā)表于 07-07 06:34

    如何燒錄程序進(jìn)入自己畫(huà)的20829板里?

    Hi,請(qǐng)問(wèn)如何燒錄程序進(jìn)入自己畫(huà)的20829板里?可以使用20829EVK的J11來(lái)實(shí)現(xiàn)么?或者有沒(méi)有其它的燒錄工具
    發(fā)表于 07-01 07:42

    max9979把DOUT也share到根線上,如果次只片選其中個(gè)CS#, 其他未被片選的芯片DOUT會(huì)是高阻態(tài)嗎?

    我有10路max9979, 共用路SPI控制接口(其中CS#是獨(dú)立的)。 當(dāng)我把DOUT也share到根線上,如果次只片選其中
    發(fā)表于 06-11 06:19

    自動(dòng)駕駛中常提的“點(diǎn)云”是個(gè)啥?

    啥?對(duì)自動(dòng)駕駛有何影響? 點(diǎn)云是個(gè)啥? 點(diǎn)云(Point Cloud)是種在三維空間中由大量離散點(diǎn)
    的頭像 發(fā)表于 05-21 09:04 ?1215次閱讀
    <b class='flag-5'>自動(dòng)</b>駕駛中常提的“<b class='flag-5'>點(diǎn)</b>云”是<b class='flag-5'>個(gè)</b>啥?