欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Matlab實現(xiàn)三維投影繪制的示例代碼

 更新時間:2022年08月12日 09:35:32   作者:slandarer  
這篇文章系小編為大家?guī)砹艘粋€三維投影繪制函數(shù)(三視圖繪制),函數(shù)支持三維曲線、曲面、三維多邊形、參數(shù)方程曲線、參數(shù)方程曲面的投影繪制,需要的可以參考一下

本期帶來一個三維投影繪制函數(shù)(三視圖繪制),函數(shù)支持三維曲線、曲面、三維多邊形、參數(shù)方程曲線、參數(shù)方程曲面的投影繪制,以下先給出代碼使用方式,文末給出工具函數(shù)完整代碼:

使用方法

三維多邊形投影及基本使用

通過介紹如何生成三維多邊形投影介紹一下函數(shù)咋用,這里的三維多邊形指的是使用patchfill3創(chuàng)建的圖形,假設(shè)我們繪制了如下一個復(fù)雜多邊形構(gòu)成的球:

c?=?1;
d?=?2*c*(3*sqrt(2)+2)/7;
m?=?d*(3*sqrt(2)-4)/4;
l?=?m+d*(2-sqrt(2))/4;?
t?=?d*(2-sqrt(2))/4;
V?=?[c-l?-t?c;?t?-c+l?c;?-t?-c+l?c;?-c+l?-t?c;?-c+l?t?c;?-t?c-l?c;?t?c-l?c;?c-l?t?c;?c?t?c-l;...
????c?-t?c-l;?c?-c+l?t;?c?-c+l?-t;?c?-t?-c+l;?c?t?-c+l;?c?c-l?-t;?c?c-l?t;?c-l?c?t;?c-l?c?-t;...
????t?c?-c+l;?-t?c?-c+l;?-t?c-l?-c;?t?c-l?-c;?c-l?t?-c;?-c+l?t?-c;?-c+l?c?-t;?-c?c-l?-t;?-c?t?-c+l;...
????-c?-t?-c+l;?-c+l?-t?-c;?-t?c?c-l;?t?c?c-l;?-c+l?c?t;?-c?c-l?t;?-c?t?c-l;?-c?-t?c-l;?-c?-c+l?t;...
????-c+l?-c?t;?-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?-c?c-l;?-t?-c?c-l;?c-l?-c?t];
F8?=?[1?2?3?4?5?6?7?8;?17?18?19?20?25?32?30?31;?22?23?45?42?41?29?24?21;...
????37?38?40?43?44?48?46?47;?9?10?11?12?13?14?15?16;?26?27?28?39?36?35?34?33];
F6?=?[5?6?30?32?33?34;?3?4?35?36?37?47;?1?2?46?48?11?10;?7?8?9?16?17?31;?20?25?26?27?24?21;...
????28?39?38?40?41?29;?14?23?22?19?18?15;?12?13?45?42?43?44];
F4?=?[6?7?31?30;?1?10?9?8;?2?3?47?46;?4?5?34?35;?32?25?26?33;?36?37?38?39;...
????11?12?44?48;?15?16?17?18;?19?20?21?22;?27?24?29?28;?40?41?42?43;?13?14?23?45];
hold?on;axis?equal;grid?on
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]);

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

axProjection3D('XYZ')?

只生成部分投影:

axProjection3D('XZ')?

為每個投影設(shè)置不同顏色:

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

以上是工具函數(shù)的基本使用,以下給出應(yīng)對其他幾種圖像格式該工具的使用效果:

三維曲面投影

此部分主要是值使用函數(shù)surf、surface、mesh函數(shù)創(chuàng)建的曲面,完全相同的使用方式:

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

axProjection3D('XYZ')?

三維曲線投影

此部分主要是值使用函數(shù)line、plot3函數(shù)創(chuàng)建的曲線,完全相同的使用方式:

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

axProjection3D('XYZ')?

function?dL=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=x*y-b*z
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

三維參數(shù)曲線投影

此部分主要是值使用函數(shù)fplot3函數(shù)創(chuàng)建的曲線,完全相同的使用方式:

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

axProjection3D('XYZ')

三維參數(shù)曲面投影

此部分主要是值使用函數(shù)fsurf函數(shù)創(chuàng)建的曲面,完全相同的使用方式:

syms?u?v;
r?=?@(u)?4?-?2*cos(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,?-14*sin(u));
fsurf(x,y,z,?[0?2*pi?0?2*pi]);
axis([-8,12,-8,12,-22,18])

axProjection3D('XYZ')?

混合類型三維繪圖投影

多種類型圖像畫在一起:

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

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

工具函數(shù)完整代碼

function?axProjection3D(varargin)
%?@author?:?slandarer
%?公眾號??:?slandarer隨筆
%?知乎????:?hikari


%?獲取參數(shù)
if?isa(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});
if?length(varargin)>1
????faceColor=varargin{2};
else
????faceColor=[.5,.5,.5];
end
[~,state,~]=intersect('XYZ',state);

%?記錄子圖形對象
ChildrenList(length(ax.Children))=ax.Children(end);
for?n=1:length(ax.Children)
????ChildrenList(n)=ax.Children(n);
end
for?n=length(ChildrenList):-1:1
????if?strcmp(ChildrenList(n).Tag,'AP3D')
????????ChildrenList(n)=[];
????end
end

%?繪制投影
minLim=[ax.XLim(2),ax.YLim(2),ax.ZLim(1)];
for?i=1:length(state)
????ii=state(i);
????for?n=1:length(ChildrenList)
????????switch?true
????????????%?Patch對象投影?
????????????case?isa(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對象投影
????????????case?isa(ChildrenList(n),'matlab.graphics.chart.primitive.Surface')||isa(ChildrenList(n),'matlab.graphics.primitive.Surface')
????????????tobj=copyobj(ChildrenList(n),ax);
????????????switch?ii
????????????????case?1,tobj.XData(:,:)=minLim(ii);
????????????????case?2,tobj.YData(:,:)=minLim(ii);
????????????????case?3,tobj.ZData(:,:)=minLim(ii);
????????????end
????????????tobj.FaceColor=faceColor;
????????????tobj.FaceAlpha=.5;
????????????tobj.EdgeColor=faceColor./5;
????????????tobj.EdgeAlpha=.9;
????????????tobj.Tag='AP3D';
????????????%?Line對象投影
????????????case?isa(ChildrenList(n),'matlab.graphics.chart.primitive.Line')||isa(ChildrenList(n),'matlab.graphics.primitive.Line')
????????????tobj=copyobj(ChildrenList(n),ax);
????????????switch?ii
????????????????case?1,tobj.XData(:,:)=minLim(ii);
????????????????case?2,tobj.YData(:,:)=minLim(ii);
????????????????case?3,tobj.ZData(:,:)=minLim(ii);
????????????end
????????????tobj.Color=[faceColor,.5];
????????????tobj.Tag='AP3D';
????????????%?三維參數(shù)化曲線
????????????case?isa(ChildrenList(n),'matlab.graphics.function.ParameterizedFunctionLine')
????????????tobj=copyobj(ChildrenList(n),ax);
????????????switch?ii
????????????????case?1,tobj.XFunction=@(t)t.*0+minLim(ii);
????????????????case?2,tobj.YFunction=@(t)t.*0+minLim(ii);
????????????????case?3,tobj.ZFunction=@(t)t.*0+minLim(ii);
????????????end
????????????tobj.Color=[faceColor,.5];
????????????tobj.Tag='AP3D';
????????????%?三維參數(shù)化曲面
????????????case?isa(ChildrenList(n),'matlab.graphics.function.ParameterizedFunctionSurface')
????????????tobj=copyobj(ChildrenList(n),ax);
????????????switch?ii
????????????????case?1,tobj.XFunction=minLim(ii);
????????????????case?2,tobj.YFunction=minLim(ii);
????????????????case?3,tobj.ZFunction=minLim(ii);
????????????end
????????????tobj.FaceColor=faceColor;
????????????tobj.FaceAlpha=.5;
????????????tobj.EdgeColor=faceColor./5;
????????????tobj.Tag='AP3D';
????????end
????end
end
end

以上就是Matlab實現(xiàn)三維投影繪制的示例代碼的詳細(xì)內(nèi)容,更多關(guān)于Matlab三維投影的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Qt利用QSortFilterProxyModel代理實現(xiàn)自定義排序與聯(lián)合過濾

    Qt利用QSortFilterProxyModel代理實現(xiàn)自定義排序與聯(lián)合過濾

    QsortFilterProxyModel類用來為model和view之間提供強大的排序和過濾支持。這篇文章將利用QSortFilterProxyModel代理實現(xiàn)自定義排序與聯(lián)合過濾,需要的可以參考一下
    2022-11-11
  • C++實現(xiàn)移動立方體示例講解

    C++實現(xiàn)移動立方體示例講解

    這篇文章主要介紹了C++實現(xiàn)移動立方體,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • 使用C++和代理IP實現(xiàn)天氣預(yù)報的采集

    使用C++和代理IP實現(xiàn)天氣預(yù)報的采集

    在當(dāng)今的互聯(lián)網(wǎng)時代,網(wǎng)絡(luò)信息的獲取變得日益重要,天氣預(yù)報信息作為日常生活的重要參考,其獲取方式也隨著技術(shù)的發(fā)展而不斷變化,在本文中,我們將探討如何使用C++和代理IP來采集天氣預(yù)報信息,文中通過代碼講解的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • C++控制臺實現(xiàn)密碼管理系統(tǒng)

    C++控制臺實現(xiàn)密碼管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++控制臺實現(xiàn)密碼管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++Fstream文件流與freopen重定向操作教程

    C++Fstream文件流與freopen重定向操作教程

    這篇文章主要介紹了C++Fstream文件流與freopen重定向教程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • 詳解C語言中strcpy函數(shù)與memcpy函數(shù)的區(qū)別與實現(xiàn)

    詳解C語言中strcpy函數(shù)與memcpy函數(shù)的區(qū)別與實現(xiàn)

    這篇文章主要介紹了C語言中字符串拷貝函數(shù)(strcpy)與內(nèi)存拷貝函數(shù)(memcpy)的不同及內(nèi)存拷貝函數(shù)的模擬實現(xiàn),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2022-12-12
  • C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    C語言動態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解

    但是在實際的編程中,往往會發(fā)生這種情況,即所需的內(nèi)存空間取決于實際輸入的數(shù)據(jù),而無法預(yù)先確定 。為了解決上述問題,C語言提供了一些內(nèi)存管理函數(shù),這些內(nèi)存管理函數(shù)可以按需要動態(tài)的分配內(nèi)存空間,也可把不再使用的空間回收再次利用
    2022-12-12
  • Qt QFtp客戶端實現(xiàn)上傳下載文件

    Qt QFtp客戶端實現(xiàn)上傳下載文件

    本文主要介紹了Qt QFtp客戶端實現(xiàn)上傳下載文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • C++11中內(nèi)聯(lián)函數(shù)(inline)用法實例

    C++11中內(nèi)聯(lián)函數(shù)(inline)用法實例

    內(nèi)聯(lián)函數(shù)本質(zhì)還是一個函數(shù),但在聲明的時候,函數(shù)體要和聲明結(jié)合在一起,否則編譯器將它作為普通函數(shù)來對待,下面這篇文章主要給大家介紹了關(guān)于C++11中內(nèi)聯(lián)函數(shù)(inline)的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • C++中map和set的使用及示例

    C++中map和set的使用及示例

    map和set是STL容器中的部分,本文主要介紹了C++中map和set的使用小結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01

最新評論