MATLAB | 一起来感受数学之美,第一届迷你黑客大赛回顾

news2024/11/20 11:29:54

Hey真的是好久不见,最近确实是比较忙更新频率也下来了,过段时间应该能恢复正常更新速度,之前给大家解说过今年举办的math is beautiful迷你黑客大赛,但这其实是第二届大赛,本期推送带大家回顾一下第一期大赛,同时也是MATHWORKS社区成立二十周年纪念比赛。

另外由于比赛代码有280个字符的限制,因此很多代码会写的晦涩难懂,以下发布的代码将是本人改编且加注释的版本:

第一届比赛大家的创造性很明显没有第二届足,但是依旧萌生了很多非常有创意的作品:

pale blue dot

原作者:Adam Danz
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/1116

改写加注释代码:

rng(0)
% 创建黑色背景colormap为粉色的坐标区域
axes('Colormap',pink,'View',-[15,24],'CLim',[-.5,8],'Color','k');               
hold on

% 绘制圆形星球
[x,y,z]=sphere(98);
surf(x,y,z,'EdgeColor','none') 

% 绘制一个圆盘
% 让x,y,z随便某组数据缺失(此处x缺失)
% 使得圆盘变成一个个有空隙的圆环
% 使用hypot获取(x,y)坐标到中心点距离映射为颜色
x(randi(99,7),:)=NaN;
surf(x*2,y*2,z*0,hypot(x,y)*6,'EdgeColor','none')
axis equal

% 生成一些白色(`w`)随机散点和一个青色(`c`)点
n=[1,2E3];
scatter3(rand(n)*4,ones(n)+1,rand(n)*7-4,randg(1,n),'w','filled')  
scatter3(2,2,0,20,'c','filled')
camva(2)

Hi 😃

链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/536

[x y]=meshgrid(linspace(-2.5,2.5,70),linspace(-5.5,5.5,70));
z=exp(-x.^2-0.5*y.^2).*cos(4*x) + exp(-3*((x+0.5).^2+0.5*y.^2));
idx=(abs(z)>0.0005 );
z(idx)=0.001*sign(z(idx));
patch(surf2patch(surf(x,y,z)),'FaceColor','interp');
view(35,65);
colormap(cool);
grid,axis off
camlight headlight 

这里只给出链接是因为这个函数并不是链接中的人所发现的,事实上这个神奇的函数:

f ( x , y ) = e − x 2 − y 2 2 cos ⁡ ( 4 x ) + e − 3 ( ( x + 0.5 ) 2 + y 2 2 ) f(x, y)=e^{-x^2-\frac{y^2}{2}} \cos (4 x)+e^{-3\left((x+0.5)^2+\frac{y^2}{2}\right)} f(x,y)=ex22y2cos(4x)+e3((x+0.5)2+2y2)

是工程师Mike Croucher于2007年在Walking Randomly上使用Mathematica发布的:

http://walkingrandomly.com/?p=19

2010年他本人也给出了俩MATLAB版本代码:

http://walkingrandomly.com/?p=2720

[x y] = meshgrid( linspace(-3,3,50), linspace(-5,5,50) );
z = exp(-x.^2-0.5*y.^2).*cos(4*x) + exp(-3*((x+0.5).^2+0.5*y.^2));
idx = ( abs(z)>0.001 );
z(idx) = 0.001 * sign(z(idx)); 

figure('renderer','opengl')
patch(surf2patch(surf(x,y,z)), 'FaceColor','interp');
set(gca, 'Box','on', ...
    'XColor',[.3 .3 .3], 'YColor',[.3 .3 .3], 'ZColor',[.3 .3 .3], 'FontSize',8)
title('$e^{-x^2 - \frac{y^2}{2}}\cos(4x) + e^{-3((x+0.5)^2+\frac{y^2}{2})}$', ...
    'Interpreter','latex', 'FontSize',15,'Color','b') 

view(35,65)
colormap( [flipud(cool);cool] )
camlight headlight, lighting phong 

zL = 0.001;
x = linspace(-3,3,50);
y = linspace(-5,5,50);
[X,Y]=meshgrid(x,y);
Z = exp(-X.^2-Y.^2/2).*cos(4*X) + exp(-3*((X+0.5).^2+Y.^2/2));
Z(Z>0.001) = zL;
Z(Z<-0.001) = -zL;
surf(X,Y,Z);
title({'Secret Messages Hidden Inside Equations',...
       '$e^{-x^2 - \frac{y^2}{2}}\cos(4x) + e^{-3((x+0.5)^2+\frac{y^2}{2})}$'},...
       'Interpreter','latex', 'FontSize',15,'Color','b') 
colormap(flipud(cool))
view([1 -1.5 2])  


Cumulus

原作者:Jenny Bosten
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/4211

改写加注释代码:

rng(333)
X=-164:.646:164;
[t,r]=cart2pol(X,X'-90);
s=(285-r)/285;
% 二维傅里叶逆变换生成噪声
image(cat(3,s*.3+.12,s*.5+.21,s*.36+.57),'AlphaData',5E4*abs(ifft2(r.^-1.7.*cos(6*rand(508)))));
B=getframe(gcf,[78 52 426 250]);

% 将每一行像素随机左右平移生成水波
m=B.cdata;
d=flip(m);
for k=1:250
    m=[m;circshift(d(k,:,:),round(15*randn),2)];
end
image(m)
axis off

首先就是通过二维傅里叶逆变换生成噪声:

之后将图形下半部分每一行都随机左右移动模拟水波:


A Time-Lapse of the Night Sky

原作者:Adam Danz
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/4841

改写加注释代码:

% 使用q/q的方式生成单位列向量与q相乘
% 从而生成从上到下数值逐渐减小的矩阵用作背景
q=50:-.5:1;
hold
imagesc(q'.*(q./q),[20,80])

% 固定每一个星轨角度变化
% 随机生成一些星轨初始角度和初始位置半径
% 并转化为x,y坐标
t=0:2.5E-5:.1;
n=4001;
[x,y]=pol2cart(6*rand(1,n)+t',rand(1,n).*(t*0+142));
m=99;
plot(x+m,y+m,'w')
% 拼凑出房子和草地
x=[1,1:.1:m,m]; 
y=[1,cos(0:.1/98:1)*30+randg(1,1,981),1]; 
fill(x,y,'k')
fill([4 4 3 6 9 8 8]*5,[5 7 7 8 7 7 5]*5,'k')
axis([1 m 1 m])
camva(4) 
colormap gray 

Above the clouds

原作者:Tim
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/8273

改写加注释代码:

a=200;
b=(.5:a)'/a;
c=(-cos(b*2*pi)+1).^.2;
d=ones(a);
f=b-.5;
r=f'.^2+f.^2;
% 生成不对称柏林噪声
m=50;
surf(b,b',abs(ifftn(exp(7i*rand(a))./r.^.9)).*(c*c')*30)
l=(m:-1:1)/m;
% 绘制云彩
hold on
for n = 1:m
    surf(b,b',d*n,d+cat(3,1,1,1),'EdgeAlpha',0,'FaceAlpha',max(.2,l(n)));
end
zlim([-a/2,a])
shading flat
colormap(flip([b,b,b]))
camva(5)
axis off 

感觉是本次比赛最酷的一个了,非常像是水墨画,同时此代码还有很多不同数值和配色的Remix Tree:


Ghost Pentagon Flower

原作者:Daniel Pereira
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/124

代码:

theta = linspace(0,360,6);
c=bone(20);
for i=20:-1:1
    patch(i*sind(theta+18*i),i*cosd(theta+18*i),c(i,:),'edgecolor','none');
end
axis equal off; set(gcf,'color','w');

White Hole

原作者:Michal Halon
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/5828

代码:

n=2000;
x=rand(4,n);
i=1;
for j=1:n
    x(4,i)=0.5-sqrt((x(1,i)-0.5)^2+(x(2,i)-0.5)^2);
    if x(4,i)>0.5
        x(:,i)=[];
    else
        if x(4,i)<0.08
            x(4,i)=0;
        end
        i=i+1;
    end
end
colormap bone
bubblechart(x(1,:),x(2,:),x(3,:),x(4,:),'MarkerFaceAlpha',0.35,'MarkerEdgeAlpha',0);
set(gcf,'Color','k')
axis square
axis off

代码想法贼简单,就是生成一些点,如果在圆外面就删掉,然后在每个点处生成随机大小半透明圆点,结束。
不过代码属实是写麻烦了,以下给出我的改写版:

n=2000;
x=rand(4,n);
x(4,:)=0.5-vecnorm(x(1:2,:)-.5);
x(:,x(4,:)>.5)=[];
x(4,x(4,:)<0.08)=0;
colormap bone
bubblechart(x(1,:),x(2,:),x(3,:),x(4,:),'MarkerFaceAlpha',0.35,'MarkerEdgeAlpha',0);
set(gcf,'Color','k')
axis square
axis off

Universe in a Nutshell

原作者:Sebastian Kraemer on
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/5036

这真的是本次比赛注释最全,代码最美观的选手了,注释比较全就不翻译了,仅仅对代码做了微调:

% set background
figure('Color','k','InvertHardcopy','off')
set(gca,'Color','k')
hold
% function shortcuts
m=@(a,c)max(min(a,c),-c);
s=@vecnorm;
n=@(p)p./s(p);
% random uniformly distributed values on the unit sphere
P=n(randn(3,1e3));
% iterate gravitational force exchange
A=copper(320);
for k=1:320
    Q=P;
    % distance of all points to each other
    D=reshape(P,3,1,[])-P;
    % calculate gravitational exchange force
    U=sum(m(D./s(D).^2,10),3)/1e4-1e-3;
    % add bounded, cumulative displacement and project result to unit sphere
    P=n(P+n(U).*m(s(U),.01));
    % plot imitating more points than actually calculated
    h=scatter(P(1,:),P(2,:),m(s(P-Q).^-3/1e8,80),A(k,:),'filled');
    alpha(h,.3)
end
axis off equal

Unknown pleasures - album cover

原作者: Alberto Cuadra Lara
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/6323

这张仿图真的太太经典了,此图曾经被作为Joy Division乐队的专辑封面

% A. Cuadra - 20 Oct 2021
figure('Color','k');
hold on;
set(gca,'Color','k','XColor','none','YColor','none')
x=linspace(-9,13);
y=4e3;% y0 - initial position
for i=1:80% 80 number of lines
s=randi([1,2]);
n=.04*rand(1,1e2)+.4/s*exp(-(x-randi([1,4])).^2/2/s^2);%noise vector + normal pdf
patch(x,y+n*9e2,'k')% fill the gap in black
plot(x,y+n*9e2,'w')% plot line
y=y-5e1;% move y axis
end

The Lighthouse

原作者:Jr
链接:
https://ww2.mathworks.cn/matlabcentral/communitycontests/contests/4/entries/3626

此代码直接用了一些特殊符号绘制灯塔,这点需要比较新的版本才能做到:

c=1200;
n=800;
hold;
% 生成一系列正弦函数填充图形
for i=18:-1:1
    y=i/(8+3)*n;
    u=c*(1-(i-1)/20);
    x=linspace(0,c,n);
    p=y/n*12;
    t=x*6/u;
    q=sin(p+t)+sin(p+.3*t);
    r=y+q*160*.8^(i-1);
    v=[x' r';c 0;0 0];
    fill(v(:,1),v(:,2),i/18*[.1 .7 1],'EdgeColor','n');
end
% 特殊符号绘制灯塔
text(9,440,'♜','Fontsi',53);
text(111,438,'◍','color','y');
axis off;
ylim([0,n])  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/76966.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么索引可以让查询变快?终于有人说清楚了!

概述 人类存储信息的发展历程大致经历如下&#xff1a; 由于是个人凭着自己理解总结的&#xff0c;因此可能不一定精确&#xff0c;但是毋庸置疑的是&#xff0c;在当代&#xff0c;各大公司机构部门的数据都是维护在数据库当中的。 数据库作为数据存储介质发展的最新产物&am…

大数据面试之MapReduce常见题目

大数据面试之MapReduce常见题目 MapReduce中Shuffle过程及优化 1.1 Shuffle的详细图解 1.2 Shuffle的详细文字过程 Shuffle文字部分描述&#xff1a; ​ Shuffle横跨Map和Reduce阶段&#xff0c;是指map()方法之后&#xff0c;reduce()方法之前&#xff0c;中间这段汇洗的过…

Web前端大作业制作个人网页(html+css+javascript)

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

功能强大UI美观的视频答题猜歌闯关娱乐微信小程序源码下载

内容目录一、详细介绍二、效果展示1.部分代码2.效果图展示三、学习资料下载一、详细介绍 这是一款拥有后端的闯关娱乐小程序 支持个人小程序和企业小程序上线运营 功能强大齐全,带数据本地化 (数据在自己服务器自己管理无需担心第三方失效的问题) 支持看视频答题闯关 支持…

Java多线程处理笔记

学习视频:598-JavaSE进阶-多线程概述_哔哩哔哩_bilibili 目录 多线程概述 进程和线程的关系 多线程并发的理解 分析程序存在几个线程 实现线程的第一种方式 实现线程的第二种方式 采用匿名内部类的方式 线程生命周期 获取线程的名字 获取当前线程对象 线程的sleep方法 …

Spring Cloud Stream 结合rocketmq

Spring Cloud Stream 结合rocketmq 官方网址&#xff1a;https://github.com/alibaba/spring-cloud-alibaba/wiki/RocketMQ 你可以在这个地址上下载到相关示例项目&#xff0c;配置项等相关信息 spring-cloud-stream 文档&#xff08;这个地址似乎只有集合kafaka和rabbit的示…

Akka 学习(六)Actor的监督机制

目录一 监督机制1.1 错误隔离性1.2 系统冗余性1.3 Actor的监督1.3.1 监督体系1.3.2 理解1,3.3 监督策越一 监督机制 1.1 错误隔离性 在学习Akka如何对失败情况进行响应之前&#xff0c;先了解一些在分布式应用程序中都应该遵循的通用策略&#xff1a;隔离错误。假设每个组件都…

【刷题-数组篇】狂刷力扣三十题,“数组”嘎嘎乱写 | 2022 12-5到12-9

前言 &#xff08;12月5日&#xff09;突然想起了很久以前别人&#xff08;具体来源已经记不清了&#xff09;传给我的一套题单。网上的题单不少&#xff0c;光收藏可不行&#xff0c;关键还得下手。 这套题单的题目数量为300出头&#xff0c;什么时候刷完我还没有明确计划&a…

web前端大作业 (仿英雄联盟网站制作HTML+CSS+JavaScript) 学生dreamweaver网页设计作业

&#x1f389;精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业…

2.IOC之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency> </depe…

英文外链代发怎么做有效果?英文外链购买平台

英文外链代发怎么做有效果&#xff1f; 答案是&#xff1a;选择权重较好的GPB外链 我们首先要知道一个观点&#xff0c;什么样的外链才有效果&#xff1f; 1.英文外链网站的有一定的权重&#xff0c;可高可低&#xff0c;但一定要有权重&#xff0c;数值指标可以参考MOZ的Do…

10.AOP之xml配置

1.使用IDEA创建工程 2.引入项目使用的依赖 <dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><depend…

HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究

小编分享了HPPH偶联无机纳米材料/白蛋白/白蛋白纳米粒/抗体/量子点/活性基团/荧光/细胞膜的研究知识&#xff0c;一起来看&#xff01; HPPH偶联无机纳米材料/白蛋白纳米粒的研究&#xff1a; HPPH 具有的光动力活性的作用光谱以及靶向性&#xff0c;对组织的穿透率&#xff0…

Android基础学习(十九)—— 进程与线程

1、进程 程序和进程的区别&#xff1a;&#xff08;1&#xff09;程序是静态的&#xff0c;就是存放在磁盘里的可执行文件&#xff0c;就是一系列的指令集合&#xff1b;&#xff08;2&#xff09;进程是动态的&#xff0c;是程序的一次执行过程&#xff0c;同一程序多次执行会…

物联网开发笔记(58)- 使用Micropython开发ESP32开发板之控制2.90寸电子墨水屏模块

一、目的 这一节我们学习如何使用我们的ESP32开发板来控制2.90寸电子墨水屏模块。 二、环境 ESP32 2.90寸 电子墨水屏模块 Thonny IDE 几根杜邦线 接线方法&#xff1a; 三、墨水屏驱动 此处注意注意&#xff1a;不同的型号、不同厂家的墨水屏驱动方式有些不同&#xff0c;…

VIIF:自监督:自适应:GAN

Self-supervised feature adaption for infrared and visible image fusion &#xff08;红外和可见光图像融合的自监督特征自适应&#xff09; 总述&#xff1a;首先&#xff0c;我们采用编码器网络来提取自适应特征。然后&#xff0c;利用两个具有注意机制块的解码器以自我…

【扫描PDF】如何将颜色淡的扫描PDF颜色变深,便于阅读??PDF中文字太淡怎么加深?汇总网上已有的方法,一波小结

一、问题背景 如果你扫描得到的PDF&#xff0c;像下图一样文字颜色非常淡&#xff0c;看起来不舒服&#xff0c;需要加深处理&#xff0c;就烦请看我下面的几个解决方法&#xff0c;都是从网上汇总得到&#xff0c;加上自己的实践和体会总结。 二、Adobe Acrobat DC PDF扫描…

20221209英语学习

今日新词&#xff1a; receiver n.收受者; 收件人; 接待者; (电话)听筒, 耳机; 收音机; (电视)接收机; 接收器; 接球手 annoy n.同“annoyance” delight n.快乐&#xff0c;愉快 railroad n.铁路, 铁道, 铁路公司, 铁路系统 brilliance n.光辉, 【光】辉度, 漂亮, (名声)…

3.IOC之注解配置

1.编写Spring框架核心配置文件applicationContext.xml 在项目目录“/src/main/resources”下新建applicationContext.xml文件&#xff0c;具体代码如下。 <?xml version"1.0" encoding"UTF-8"?> <beans xmlns"http://www.springframework…

Google如何增加外链?谷歌外链自动化靠谱吗?

Google如何增加外链&#xff1f; 答案是&#xff1a;循序渐进增加免费开放性注册的外链和GPB外链 我们在发布Google外链的时候&#xff0c;总想找捷径&#xff0c;通过软件工具自动发布外链来提高网站排名和流量&#xff0c;加快SEO优化进度&#xff0c;缩短时间成本&#xf…