这场比赛居然已经是七年前的事情了,大佬A Frayed Knot在StackExchange上发起了挑战,举办了名为Tweetable Mathematical Art的比赛(实际上活动整整进行了一年半)
比赛规则如下:
使用C++代码或格式与C++类似的代码,使用不多于140个字符,通过输入x,y坐标输出R,G,B颜色值的形式构造函数,并生成一张1024x1024大小的图片。
挑战发起者给出了的一个基础示例:
3z2pa
/* RED */
return i&&j?(i%j)&(j%i):0;
/* GREEN */
return i&&j?(i%j)+(j%i):0;
/* BLUE */
return i&&j?(i%j)|(j%i):0;
但这个我拿c++和matlab跑了一下发现爱你效果完全不是那样的,应该是有点写错的地方,期待大家的指出,同时发现Wolfram中国区一行代码大赛杨永康作品和这个很相似,将其改写为matlab改写版:
[X,Y]=meshgrid(0:1023);
P(:,:,1)=bitand(bitand(mod(X,Y),mod(Y,X)),255);
P(:,:,2)=bitand(mod(X,Y)+mod(Y,X),255);
P(:,:,3)=bitand(bitor(mod(X,Y),mod(Y,X)),255);
imshow(uint8(P))
同时我自己做了很多尝试,同时发现若是将代码微调至如下代码,其结果也非常有意思:
% @author:slandarer
[X,Y]=meshgrid(0:1023);
P(:,:,1)=bitand(bitand(mod(X,Y),mod(Y,X)),255);
P(:,:,2)=bitand(bitxor(mod(X,Y),mod(Y,X)),255);
P(:,:,3)=bitand(bitor(mod(X,Y),mod(Y,X)),255);
imshow(uint8(P))
% [X,Y]=meshgrid(0:1023);
% P(:,:,1)=mod(bitand(mod(X,Y),mod(Y,X)),255);
% P(:,:,2)=mod(bitxor(mod(X,Y),mod(Y,X)),255);
% P(:,:,3)=mod(bitor(mod(X,Y),mod(Y,X)),255);
% imshow(uint8(P))
正常方格布:
[i,j]=meshgrid(0:1023);
s=3./(j+99);DIM=1024;
P=(mod(round((i+DIM).*s+j.*s),2)+mod(round((DIM.*2-i).*s+j.*s),2)).*127;
imshow(uint8(P))
扭曲并添加颜色:
[i,j]=meshgrid(0:1023);
s=3./(j+99);DIM=1024;
y=(j+sin((i.*i+(j-700).^2.*5)./100./DIM).*35).*s;
P(:,:,1)=(mod(round((i+DIM).*s+y),2)+mod(round((DIM.*2-i).*s+y),2)).*127;
P(:,:,2)=(mod(round(5.*((i+DIM).*s+y)),2)+mod(round(5.*((DIM.*2-i).*s+y)),2)).*127;
P(:,:,3)=(mod(round(29.*((i+DIM).*s+y)),2)+mod(round(29.*((DIM.*2-i).*s+y)),2)).*127;
imshow(uint8(P))
Martin Ender大佬——随机油画及色带
以下代码因为跑的太慢了将更改颜色概率调到了1/100,想要还原原作品可以将各个数值进行调整。
function randpainter
r=@(n)randi([0,n-1],[1,1]);
R=zeros(1024,1024);G=zeros(1024,1024);B=zeros(1024,1024);
for i=1:1024
for j=1:1024
R(i,j)=RD(i,j);
G(i,j)=GR(i,j);
B(i,j)=BL(i,j);
end
end
P(:,:,1)=R;P(:,:,2)=G;P(:,:,3)=B;
imshow(uint8(P))
function C=RD(i,j)
if R(i,j)~=0
else
if r(99)~=0,R(i,j)=RD(mod(i+r(2),1024)+1,mod(j+r(2),1024)+1);
else,R(i,j)=r(256);disp('一缕数值填入完成');
end
end;C=R(i,j);disp([i,j,C]);
end
function C=GR(i,j)
if G(i,j)==0
if r(99)~=0,G(i,j)=GR(mod(i+r(2),1024)+1,mod(j+r(2),1024)+1);
else,G(i,j)=r(256);disp('一缕数值填入完成');
end
end;C=G(i,j);disp([i,j,C]);
end
function C=BL(i,j)
if B(i,j)==0
if r(99)~=0,B(i,j)=BL(mod(i+r(2),1024)+1,mod(j+r(2),1024)+1);
else,B(i,j)=r(256);disp('一缕数值填入完成');
end
end;C=B(i,j);disp([i,j,C]);
end
end
[i,j]=meshgrid(0:1023);
P(:,:,1)=cos(atan2(j-512,i-512)./2).^2.*255;
P(:,:,2)=(cos(atan2(j-512,i-512)./2-2.*acos(-1)/3)).^2*255;
P(:,:,3)=(cos(atan2(j-512,i-512)./2+2.*acos(-1)/3)).^2*255;
imshow(uint8(P))
大佬cjfaure——尖锐漩涡
C++有很多离谱的类型转换,这些特性用MATLAB来实现需要多写很多代码:
[i,j]=meshgrid(0:1023);
P(:,:,1)=floor(floor(sqrt((73-i).^2+(609-j).^2)+1)./(sqrt(abs(sin(floor(sqrt((860-i).^2+(162-j).^2))./115)))+1)./200).*90;
P(:,:,2)=floor(floor(sqrt((160-i).^2+(60-j).^2)+1)./(sqrt(abs(sin(floor(sqrt((86-i).^2+(860-j).^2))./115)))+1)./200).*90;
P(:,:,3)=floor(floor(sqrt((844-i).^2+(200-j).^2)+1)./(sqrt(abs(sin(floor(sqrt((250-i).^2+(20-j).^2))./115)))+1)./200).*90;
imshow(uint8(P))
对参数进行微调:
[i,j]=meshgrid(0:1023);
P(:,:,1)=fix(fix(sqrt((148-i).^2+(1000-j).^2)+1)./(sqrt(abs(sin(fix(sqrt((500-i).^2+(400-j).^2))./115)))+1)./200).*90;
P(:,:,2)=fix(fix(sqrt((610-i).^2+(60-j).^2)+1)./(sqrt(abs(sin(fix(sqrt((864-i).^2+(860-j).^2))./115)))+1)./200).*90;
P(:,:,3)=fix(fix(sqrt((180-i).^2+(100-j).^2)+1)./(sqrt(abs(sin(fix(sqrt((5-03-i).^2+(103-j).^2))./115)))+1)./200).*90;
imshow(uint8(P))
还是cjfaure大佬——音乐谱
亲测其代码C++中并不能跑出所展示的效果,这里对其进行改写让其尽量相似:
[i,j]=meshgrid(0:1023);
P=mod(bitand(fix(100.*sin(fix((i+400).*(j+100)./11115))),i,'int16').*1021,256).*2;
imshow(uint8(P))
依旧是Martin Ender大佬——Hofstadter’s Q-sequence
function Q_seq
h=zeros([1,1000]);DIM=1024;
R=zeros(1024,1024);G=zeros(1024,1024);B=zeros(1024,1024);
for i=1:1024
for j=1:1024
disp([i,j])
R(i,j)=RD(i,j);
G(i,j)=GR(i,j);
B(i,j)=BL(i,j);
end
end
P(:,:,1)=R;P(:,:,2)=G;P(:,:,3)=B;
imshow(uint8(P./1024.*255))
function C=RD(i,j)
if j<0
if h(i)==0
if i<=2
h(i)=1;
else
h(i)=RD(i-RD(i-1,j),j)+RD(i-RD(i-2,j),j);
end
end
C=h(i);
else
C=GR(i+256,j+512);
end
end
function C=GR(i,j)
C=DIM-4*RD(fix(sqrt((i-512)*(i-512)+(j-768)*(j-768))/2.9)+1,-1);
end
function C=BL(i,j)
C=DIM-4*RD(fix(sqrt((i-768)*(i-768)+(j-256)*(j-256))/2.9)+1,-1);
end
end
Snack大佬——三色谢宾斯基三角形
[i,j]=meshgrid(0:1023);
P(:,:,1)=fix(cos(bitand(i,j))).*255;
P(:,:,2)=fix(cos(bitand(1024-i,1024-j))).*255;
P(:,:,3)=fix(tan(bitxor(i,j))).*125;
imshow(uint8(P))
另外,欢迎关注公众号:slandarer随笔
那里更新的会快一丝丝
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)