绘制3D文字MATLAB代码

绘制3D文字MATLAB代码
绘制3D文字MATLAB代码

function [X,Y,Z] = word3d(str,scale)

% 绘制3D文字

% word3d(str,scale) 绘制3D文字,输入参数str为字符串变量,用来指定文字内容。

% scale为标量,用来指定字体高度。

% [X,Y,Z] = word3d(str,scale) 返回3D文字对应的3维网格坐标数据X,Y和Z。

%

% CopyRight:xiezhh(谢中华)

% 2011.8.2

% Example:

% word3d('我爱你,和平!',10);

% 判断输入参数个数和类型是否符合要求

if nargin == 0

str = 'MATLAB技术论坛(谢中华)';

scale = 1;

elseif nargin == 1

scale = 1;

if ~ischar(str)

error('输入参数错误:第一个输入参数应为字符串。');

end

elseif nargin == 2

if ~ischar(str) || ~isscalar(scale)

error('输入参数错误:第一个输入参数应为字符串,第二个输入参数应为标量。');

end

end

% 创建隐藏的图形窗口,写入文字并保存为图片

new_fig = figure('visible','off');

word_handle = text(0.01,0.5,str,...

'fontsize',20,...

'fontweight','bold',...

'fontunits','normalized');

axis off

set(gcf,'PaperPosition',[0 0 8 8],'PaperUnits','normalized')

saveas(gca,[pwd '\word.png']);

delete(new_fig);

% 读取带有文字的图片,把文字部分切割出来

I = imread([pwd '\word.png']);

BW = ~im2bw(I,0.6);

[x,y] = find(BW);

if isempty(x)

warning('您可能没有输入文字吧。');

return;

end

BW = BW(min(x):max(x),min(y):max(y)); BW = flipud(BW);

[m,n] = size(BW);

BW0 = zeros(m+2,n+2);

BW0(2:m+1,2:n+1) = BW;

[m,n] = size(BW0);

% 绘图或返回网格数据

if nargout > 0

[X,Y] = meshgrid(1:n,1:m);

Z = scale*BW0;

else

surf(1:n,1:m,scale*BW0);

colormap(hot);

shading interp;

axis equal;

axis off;

end

相关主题
相关文档
最新文档