Matlab文字球之长安十二时辰

it2022-05-05  212

使用MATLAB做一个滚动的文字球,文字内容来源于小说《长安十二时辰》片段,至于为什么节选《长安十二时辰》,当然是因为他最近火啊。有兴趣也可以做滚动文字球之百家姓、之千字文、之万物等。废话少说,代码如下:

function changan %% 球的方程 t1 = linspace(0,2*pi,20); t2 = linspace(-pi/2,pi/2,20); [Theta, Pho] = meshgrid(t1,t2); x = cos(Pho).*cos(Theta); y = cos(Pho).*sin(Theta); z = sin(Pho); %% 读文本及处理 fid=fopen('长安十二时辰.txt','r'); data_changan=fscanf(fid,'%s'); fclose(fid); expression={',','。',';','?','“','”','、'}; replace={''}; data_new=regexprep(data_changan,expression,replace);%正则表达式 str=data_new(1:400); %% ColorMat = jet(200); id = randi(200,1,400); surf([x,x(:,1)]/8,[y,y(:,1)]/8,[z,z(:,1)]/8,'FaceColor','r','EdgeColor','None'); camlight; hold on; arrayfun(@(i)text(x(i),y(i),z(i),str(i),'Color',ColorMat(id(i),:)),1:400); axis([-1.1,1.1,-1.1,1.1,-1.1,1.1]); axis vis3d off; set(gcf,'WindowButtonMotionFcn',@MyWindowButtonMotionFcn); hold off; function MyWindowButtonMotionFcn(hobj, eve) cp = get(gca,'CurrentPoint'); view(cp(1,:)); end end

效果​如下:

文字球随着鼠标的滚动而滚动。

​简单说明:第一部分为球的方程;第二部分读取文本《长安十二时辰.txt​》,并使用正则表达式regexprep把其中的标点符号删掉只保留汉字;第三部分使用arrayfun把读取到的文字放到球上,并且设置文字为不同的颜色使文字球好看一点;第四部分设置figure的WindowButtonMotionFcn,当鼠标移动时,执行相应的CallBack函数,响应函数通过获取坐标轴的坐标点CurrentPoint,通过设置图形的当前视点来实现文字球的滚动。

微信公众号:三猫MATLAB


最新回复(0)