MATLAB | 祝各位MATLABer元旦快乐!附本账号年终总结

文摘   2025-01-01 10:16   英国  

Hey,大家又是好久不见,这篇推送本来应该在元旦前的几天发出来的,但是临近元旦比较忙而且突然感冒,就往后拖了拖,好在还是在元旦当天赶完推送,元旦前感冒好的差不多了也算是除旧迎新了,这篇文章既是元旦祝福,也是一篇趣味小代码分享,同时也算是年终总结,首先来看趣味代码部分,效果大概这样:

祝大家元旦快乐!!!新的一年里除旧迎新,身体健康,步步高升,心想事成,事事顺意!!!

趣味代码

完整代码如下:

function happyNewYear(STR)
if nargin<1
    STR={'2025','元旦快乐','身体健康','步步高升','心想事成','事事顺意'};
end
disp('正在加载新年祝福...')
% 循环构建文段矩阵
STRMX{length(STR)}=[];
STRMY{length(STR)}=[];
STRLN(length(STR))=0;
for i=1:length(STR)
    disp(['已加载:',num2str(i),'/',num2str(length(STR))])
    string=STR{i};
    CaptionMat=zeros(25*length(string),25);
    for j=1:length(string)
        CaptionMat(25*(j-1)+1:25*j,:)=getWordMatrix(string(j));
    end
    [XMesh,YMesh]=find(CaptionMat~=0);
    sizeSTRM=size(CaptionMat);
    STRMX{i}=(XMesh-sizeSTRM(1)/2)./12.5;
    STRMY{i}=(YMesh-sizeSTRM(2)/2)./12.5;
    STRLN(i)=length(XMesh);
end
disp('新年祝福加载完毕...')
fig=figure('units','normalized''position',[.1,.1,.5,.8],...
    'UserData',[0,55,17,42,31,44,34,31,48,35,48]);
axes('parent',fig, 'NextPlot','add''Color',[0,0,0],...
    'DataAspectRatio',[1,1,1], 'XLim',[-100,100], 'YLim',[0,200], 'Position',[0,0,1,1]);


[XMesh, YMesh] = meshgrid(linspace(-1180));
YMesh = YMesh.*linspace(5,1,80); XMesh = XMesh.*linspace(5,1,80).';
XY = [XMesh(:), YMesh(:)]*[cos(pi/4), sin(pi/4); - sin(pi/4), cos(pi/4)];
XMesh = XY(:,1); YMesh = XY(:,2); XMesh(YMesh < 0) = []; YMesh(YMesh < 0) = [];
CMesh = 1 - (YMesh(:) - min(YMesh(:)))./(max(YMesh(:)) - min(YMesh(:))).*2;
scatter(XMesh(:).*50, YMesh(:).*5010'filled''CData'repmat(CMesh, 13))

OX = (rand(max(STRLN), 1) - .5).*200;
OY = rand(max(STRLN), 1).*130 + 70;
OS = 5.*ones(max(STRLN), 1);
OC = .1.*ones(max(STRLN), 3);
txtHdl = scatter(OX, OY, 'filled''CData',OC, 'SizeData',OS);

for i = 1:length(STRLN)*10
    n = mod(i - 1length(STRLN)) + 1;
    NX = [STRMX{n}.*20; (rand(max(STRLN) - STRLN(n), 1) - .5).*200];
    NY = [STRMY{n}.*20 + 130rand(max(STRLN) - STRLN(n), 1).*130 + 70];
    NS = [20.*ones(STRLN(n), 1); 5.*ones(max(STRLN) - STRLN(n), 1)];
    NC = [.8.*ones(STRLN(n), 3); .1.*ones(max(STRLN) - STRLN(n), 3)];
    for j = 1:50
        txtHdl.XData = OX + j.*(NX - OX)./50;
        txtHdl.YData = OY + j.*(NY - OY)./50;
        txtHdl.SizeData = OS + j.*(NS - OS)./50;
        txtHdl.CData = OC + j.*(NC - OC)./50;
        pause(.02); drawnow();
    end   
    pause(1)
    OX = NX; OY = NY; OS = NS; OC = NC;
    NX = (rand(max(STRLN), 1) - .5).*200;
    NY = rand(max(STRLN), 1).*130 + 70;
    NS = 5.*ones(max(STRLN), 1);
    NC = .1.*ones(max(STRLN), 3);
    for j = 1:50
        txtHdl.XData = OX + j.*(NX - OX)./50;
        txtHdl.YData = OY + j.*(NY - OY)./50;
        txtHdl.SizeData = OS + j.*(NS - OS)./50;
        txtHdl.CData = OC + j.*(NC - OC)./50;
        pause(.02); drawnow();
    end  
    OX = NX; OY = NY; OS = NS; OC = NC;
end

%% ========================================================================
    % 文字矩阵生成函数
    function wordMatrix=getWordMatrix(CHAR)
        % Copyright (c) 2023, Zhaoxu Liu / slandarer
        figGWM=figure('units','pixels','position',[20 20 160 160],...
            'Numbertitle','off','Color',[1 1 1],'resize','off',...
            'visible','off','menubar','none');
        axGWM=axes('Units','pixels','parent',figGWM,'Color',[1 1 1],...
            'Position',[0 0 160 160],'XLim',[0 16],'YLim',[0 16],...
            'XColor',[1 1 1],'YColor',[1 1 1],'NextPlot','add');
        text(axGWM,8,8.5,CHAR,'HorizontalAlignment','center','FontSize',120)
        saveas(figGWM,['.\',CHAR,'.png']);pic=imread(['.\',CHAR,'.png']);
        delete(['.\',CHAR,'.png']);delete(axGWM);set(figGWM,'Visible','on');close all
        [rowMax,colMax,~]=size(pic);
        picData=pic(:,:,1)<125;
        wordMatrix=zeros(25,25);
        % 统计每个像素内点数确定黑色还是白色
        for ii=1:25
            rowLim=round([ii-1,ii]./25.*rowMax);
            rowLim(rowLim==0)=1;
            for jj=1:25
                colLim=round([jj-1,jj]./25.*colMax);
                colLim(colLim==0)=1;
                wordMatrix(ii,jj)=sum(sum(picData(rowLim(1):rowLim(2),colLim(1):colLim(2))));
            end
        end
        wordMatrix(wordMatrix<10)=0;
        wordMatrix=wordMatrix';
        wordMatrix=wordMatrix(:,end:-1:1);
    end
end

年终总结

以下是关于MATLAB的本账号的年终总结:

众所周不知,去年年初拿到了MATHWORKS官方举办的迷你黑客大赛的奖品,虽然和很多大佬有很大差距但还是基本上拿满了奖品:

专家评选前三名,以及投票榜前十:~

每周的阶段性获奖者:

获得的奖品:


竞赛中的代码被官方提到:

发布的技巧和趣味代码被官方提到:

发布推文入选每周必读并获得第二个杯子:


发布的工具登上MATLAB社区首页:

fileexchange月下载量过千排名进前20:

受邀在MATLAB社区分享技巧,技巧被MATLAB官方团队传阅,并希望安排访谈:

在无人发现的角落偷偷进行了官方采访,采访发布在Mathworks官网及MATLAB公众号:

  • https://blogs.mathworks.com/community/2024/05/06/community-qa-zhaoxu-liu/
  • https://mp.weixin.qq.com/s/LKrnT8MxXCVfI6sX_aAnLA

官网上发布了一些下载量过千或者近千的资源(预计今年中旬会有资源下载量过万):

2024年这几篇推文阅读量较高

弦图绘制挑战

MATLAB绘图速查表

MATLAB 及 python 玫瑰

粒子玫瑰

环形柱状图

怎么用 MATLAB 优雅的推公式

R2024b 新版本更新内容

R2024a 新版本更新内容

新的开始

总而言之,闲话少叙,新的一年我们一起继续快乐MATLAB呀!祝大家元旦快乐,事事顺意!!


slandarer随笔
slandarer个人公众号,目前主要更新MATLAB相关内容。
 最新文章