Matlab如何实现三维投影绘制(matlab,开发技术)

时间:2024-05-08 01:16:53 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

使用方法

三维多边形投影及基本使用

通过介绍如何生成三维多边形投影介绍一下函数咋用,这里的三维多边形指的是使用patchfill3创建的图形,假设我们绘制了如下一个复杂多边形构成的球:

c=1;
d=2c(3sqrt(2)+2)/7;
m=d
(3sqrt(2)-4)/4;
l=m+d
(2-sqrt(2))/4;
t=d*(2-sqrt(2))/4;
V=[c-l-tc;t-c+lc;-t-c+lc;-c+l-tc;-c+ltc;-tc-lc;tc-lc;c-ltc;ctc-l;...
c-tc-l;c-c+lt;c-c+l-t;c-t-c+l;ct-c+l;cc-l-t;cc-lt;c-lct;c-lc-t;...
tc-c+l;-tc-c+l;-tc-l-c;tc-l-c;c-lt-c;-c+lt-c;-c+lc-t;-cc-l-t;-ct-c+l;...
-c-t-c+l;-c+l-t-c;-tcc-l;tcc-l;-c+lct;-cc-lt;-ctc-l;-c-tc-l;-c-c+lt;...
-c+l-ct;-c+l-c-t;-c-c+l-t;-t-c-c+l;-t-c+l-c;t-c+l-c;t-c-c+l;c-l-c-t;...
c-l-t-c;t-cc-l;-t-cc-l;c-l-ct];
F8=[12345678;1718192025323031;2223454241292421;...
3738404344484647;910111213141516;2627283936353433];
F6=[5630323334;3435363747;1246481110;789161731;202526272421;...
283938404129;142322191815;121345424344];
F4=[673130;11098;234746;453435;32252633;36373839;...
11124448;15161718;19202122;27242928;40414243;13142345];
holdon;axisequal;gridon
axis([-1.5,1.5,-1.5,1.5,-1.5,1.5])
view(3);
patch('Vertices',V,'Faces',F4,'FaceColor',[0.8.9]);
patch('Vertices',V,'Faces',F6,'FaceColor',[0.5.9]);
patch('Vertices',V,'Faces',F8,'FaceColor',[0.5.5]);

Matlab如何实现三维投影绘制

在代码最后加入这么一行即可生成投影:

axProjection3D('XYZ')

Matlab如何实现三维投影绘制

只生成部分投影:

axProjection3D('XZ')

Matlab如何实现三维投影绘制

为每个投影设置不同颜色:

axProjection3D('X')
axProjection3D('Y',[.7,0,0])
axProjection3D('Z',[0,0,.7])

Matlab如何实现三维投影绘制

以上是工具函数的基本使用,以下给出应对其他几种图像格式该工具的使用效果:

三维曲面投影

此部分主要是值使用函数surfsurfacemesh函数创建的曲面,完全相同的使用方式:

cplxdemo
axis([-1.5,1.5,-1.5,1.5,-1.5,1.5])

axProjection3D('XYZ')

Matlab如何实现三维投影绘制

三维曲线投影

此部分主要是值使用函数lineplot3函数创建的曲线,完全相同的使用方式:

[~,L]=ode45(@(t,L)Lorenz(t,L),0:.01:100,[1;1;1;10;28;8/3]);
plot3(L(:,1),L(:,2),L(:,3))
gridon

axProjection3D('XYZ')

functiondL=Lorenz(t,L)
%L=[x;y;z;a;r;b];
%dL=[dx/dt;dy/dt;dz/dt;0,0,0];
%dz/dt=-a(x-y)
%dy/dt=x
(r-z)-y
%dz/dt=xy-bz
dL=zeros([6,1]);
dL(1)=-L(4)(L(1)-L(2));
dL(2)=L(1)
(L(5)-L(3))-L(2);
dL(3)=L(1)L(2)-L(6)L(3);
dL(4:6)=0;
end

Matlab如何实现三维投影绘制

三维参数曲线投影

此部分主要是值使用函数fplot3函数创建的曲线,完全相同的使用方式:

xt=@(t)exp(-t/10).sin(5t);
yt=@(t)exp(-t/10).cos(5t);
zt=@(t)t;
fplot3(xt,yt,zt,[-1010])

axProjection3D('XYZ')

Matlab如何实现三维投影绘制

三维参数曲面投影

此部分主要是值使用函数fsurf函数创建的曲面,完全相同的使用方式:

symsuv;
r=@(u)4-2cos(u);
x=piecewise(u<=pi,-4
cos(u)(1+sin(u))-r(u)cos(u)cos(v),...
u>pi,-4
cos(u)(1+sin(u))+r(u)cos(v));
y=r(u)sin(v);
z=piecewise(u<=pi,-14
sin(u)-r(u)sin(u)cos(v),...
u>pi,-14sin(u));
fsurf(x,y,z,[02
pi02*pi]);
axis([-8,12,-8,12,-22,18])

axProjection3D('XYZ')

Matlab如何实现三维投影绘制

混合类型三维绘图投影

多种类型图像画在一起:

xt=@(t)exp(-t/10).sin(5t);
yt=@(t)exp(-t/10).cos(5t);
zt=@(t)t;
fplot3(xt,yt,zt,[-1010],'LineWidth',2)
holdon

[X,Y,Z]=peaks(30);
surf(X,Y,Z)
axis([-5,5,-5,5,-8,8])
axProjection3D('XYZ')

Matlab如何实现三维投影绘制

工具函数完整代码

functionaxProjection3D(varargin)
%@author:slandarer
%公众号:slandarer随笔
%知乎:hikari

%获取参数
ifisa(varargin{1},'matlab.graphics.axis.Axes')
ax=varargin{1};varargin(1)=[];
else
ax=gca;
end
hold(ax,'on')
ax.XLim=ax.XLim;
ax.YLim=ax.YLim;
ax.ZLim=ax.ZLim;
state=upper(varargin{1});
iflength(varargin)>1
faceColor=varargin{2};
else
faceColor=[.5,.5,.5];
end
[~,state,~]=intersect('XYZ',state);

%记录子图形对象
ChildrenList(length(ax.Children))=ax.Children(end);
forn=1:length(ax.Children)
ChildrenList(n)=ax.Children(n);
end
forn=length(ChildrenList):-1:1
ifstrcmp(ChildrenList(n).Tag,'AP3D')
ChildrenList(n)=[];
end
end

%绘制投影
minLim=[ax.XLim(2),ax.YLim(2),ax.ZLim(1)];
fori=1:length(state)
ii=state(i);
forn=1:length(ChildrenList)
switchtrue
%Patch对象投影
caseisa(ChildrenList(n),'matlab.graphics.primitive.Patch')
tobj=copyobj(ChildrenList(n),ax);
tobj.Vertices(:,ii)=minLim(ii);
tobj.FaceColor=faceColor;
tobj.FaceAlpha=.5;
tobj.EdgeColor=faceColor./5;
tobj.EdgeAlpha=.9;
tobj.Tag='AP3D';
%Surface对象投影
caseisa(ChildrenList(n),'matlab.graphics.chart.primitive.Surface')||isa(ChildrenList(n),'matlab.graphics.primitive.Surface')
tobj=copyobj(ChildrenList(n),ax);
switchii
case1,tobj.XData(:,:)=minLim(ii);
case2,tobj.YData(:,:)=minLim(ii);
case3,tobj.ZData(:,:)=minLim(ii);
end
tobj.FaceColor=faceColor;
tobj.FaceAlpha=.5;
tobj.EdgeColor=faceColor./5;
tobj.EdgeAlpha=.9;
tobj.Tag='AP3D';
%Line对象投影
caseisa(ChildrenList(n),'matlab.graphics.chart.primitive.Line')||isa(ChildrenList(n),'matlab.graphics.primitive.Line')
tobj=copyobj(ChildrenList(n),ax);
switchii
case1,tobj.XData(:,:)=minLim(ii);
case2,tobj.YData(:,:)=minLim(ii);
case3,tobj.ZData(:,:)=minLim(ii);
end
tobj.Color=[faceColor,.5];
tobj.Tag='AP3D';
%三维参数化曲线
caseisa(ChildrenList(n),'matlab.graphics.function.ParameterizedFunctionLine')
tobj=copyobj(ChildrenList(n),ax);
switchii
case1,tobj.XFunction=@(t)t.0+minLim(ii);
case2,tobj.YFunction=@(t)t.
0+minLim(ii);
case3,tobj.ZFunction=@(t)t.*0+minLim(ii);
end
tobj.Color=[faceColor,.5];
tobj.Tag='AP3D';
%三维参数化曲面
caseisa(ChildrenList(n),'matlab.graphics.function.ParameterizedFunctionSurface')
tobj=copyobj(ChildrenList(n),ax);
switchii
case1,tobj.XFunction=minLim(ii);
case2,tobj.YFunction=minLim(ii);
case3,tobj.ZFunction=minLim(ii);
end
tobj.FaceColor=faceColor;
tobj.FaceAlpha=.5;
tobj.EdgeColor=faceColor./5;
tobj.Tag='AP3D';
end
end
end
end

本文:Matlab如何实现三维投影绘制的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java怎么将excel数据转为树形下一篇:

16 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18