您好,登錄后才能下訂單哦!
本篇內容主要講解“Python和Matlab怎么實現炫酷的3D旋轉圖”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Python和Matlab怎么實現炫酷的3D旋轉圖”吧!
站長素材-分享綜合設計素材的平臺 (chinaz.com)
#~~~~歡迎關注公眾號:電力系統與算法之美~~~~~~~~~~~~· #~~~~~~~~~導入相關庫~~~~~~~~~~~~~~~~~~~~· import urllib.request from lxml import etree #~~~~~~~~~1.請求對象的定制~~~~~~~~~~~~~~~~~ def create_request(page): if (page == 1): url = 'https://sc.chinaz.com/tag_tupian/YaZhouMeiNv.html' else: url = 'https://sc.chinaz.com/tag_tupian/yazhoumeinv_' + str(page) + '.html' # print(url) headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36' } request = urllib.request.Request(url=url, headers=headers) return request #~~~~~~~~~~~2.獲取網頁的源碼~~~~~~~~~~~~~~~~~~~~~ def get_content(request): response = urllib.request.urlopen(request) content = response.read().decode('utf-8') return content #~~~~~~~~~~~~~~~~~~~3.下載圖片~~~~~~~~~~~~~~~~~~~~~~~~~~ def down_img(content): # 下載文件格式:urllib.request.urlretrieve('圖片地址','文件的名字') tree = etree.HTML(content) name_list = tree.xpath('//div[@id = "container"]//a/img/@alt') # 一般涉及到圖片的網站,都會進行懶加載,要把src換成src2(懶加載時,src會以src2出現) src_list = tree.xpath('//div[@id = "container"]//a/img/@src2') # print(len(name_list)) # print(len(src_list)) for i in range(len(name_list)): name = name_list[i] src = src_list[i] url = 'https:' + src url = url.replace('_s', '') urllib.request.urlretrieve(url=url, filename='./meinv/' + name + '.jpg') #~~~~~~~~~運行~~~~~~~~~~~~~~~ if __name__ == '__main__': start_page = int(input('請輸入起始頁碼:')) end_page = int(input('請輸入終止頁碼:')) for page in range(start_page, end_page + 1): #~~~~1.定制請求對象~~~~~ request = create_request(page) #~~~~2.獲取網頁源碼~~~~~ content = get_content(request) #~~~~~3.解析源碼并下載圖片~~~ down_img(content)
溫馨提示:meinv這個文件夾是提前建立的。
由1中爬取的照片,我們就可以為接下來的事做準備啦。選取十二張照片,如圖:
運行出來比下面這個還炫酷:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS3制作3D圖片立方體旋轉特效</title> <link rel="stylesheet" href="css/index.css" rel="external nofollow" > </head> <body> <!--/*外層最大容器*/--> <div class="wrap"> <!-- /*包裹所有元素的容器*/--> <div class="cube"> <!--前面圖片 --> <div class="out_front"> <img src="img/1.jpg" class="pic"> </div> <!--后面圖片 --> <div class="out_back"> <img src="img/2.jpg" class="pic"> </div> <!--左圖片 --> <div class="out_left"> <img src="img/3.jpg" class="pic"> </div> <!--右圖片 --> <div class="out_right"> <img src="img/4.jpg" class="pic"> </div> <!--上圖片 --> <div class="out_top"> <img src="img/5.jpg" class="pic"> </div> <!--下圖片 --> <div class="out_bottom"> <img src="img/6.jpg" class="pic"> </div> <!--小正方體 --> <span class="in_front"> <img src="img/7.jpg" class="in_pic"> </span> <span class="in_back"> <img src="img/8.jpg" class="in_pic"> </span> <span class="in_left"> <img src="img/9.jpg" class="in_pic"> </span> <span class="in_right"> <img src="img/10.jpg" class="in_pic"> </span> <span class="in_top"> <img src="img/11.jpg" class="in_pic"> </span> <span class="in_bottom"> <img src="img/12.jpg" class="in_pic"> </span> </div> </div> </body> </html>
動態視頻:
%====歡迎關注關注號:電力系統與算法之美 function wlz3d path='.\meinv\';%文件夾名稱 files=dir(fullfile(path,'*.jpg')); picNum=size(files,1); %% 遍歷路徑下每一幅圖像 for i=1:picNum fileName=strcat(path,files(i).name); img=imread(fileName); img=imresize(img,[120,120]); imgSet{i}=img; end %% fig axes設置 fig=figure('units','pixels','position',[50 50 600 600],... 'Numbertitle','off','resize','off',... 'name','album3d','menubar','none'); ax=axes('parent',fig,'position',[-0.5 -0.5 2 2],... 'XLim', [-6 6],... 'YLim', [-6 6],... 'ZLim', [-6 6],... 'Visible','on',... 'XTick',[], ... 'YTick',[],... 'Color',[0 0 0],... 'DataAspectRatioMode','manual',... 'CameraPositionMode','manual'); hold(ax,'on') ax.CameraPosition=[5 5 5]; %% 用于繪制圖片的網格 [XMesh,YMesh]=meshgrid(linspace(-1,1,120),linspace(-1,1,120)); ZMesh=ones(120,120); %% 繪制圖片立方體 surfPic(1)=surf(XMesh,YMesh,ZMesh,'CData',imgSet{mod(0,picNum)+1},'EdgeColor','none','FaceColor','interp'); surfPic(2)=surf(XMesh,YMesh(end:-1:1,:),-ZMesh,'CData',imgSet{mod(1,picNum)+1},'EdgeColor','none','FaceColor','interp'); surfPic(3)=surf(ZMesh,XMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(2,picNum)+1},'EdgeColor','none','FaceColor','interp'); surfPic(4)=surf(XMesh,ZMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(3,picNum)+1},'EdgeColor','none','FaceColor','interp'); surfPic(5)=surf(-ZMesh,XMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(4,picNum)+1},'EdgeColor','none','FaceColor','interp'); surfPic(6)=surf(XMesh,-ZMesh,YMesh(end:-1:1,:),'CData',imgSet{mod(5,picNum)+1},'EdgeColor','none','FaceColor','interp'); %% 依靠小立方體數據繪制中等立方體 for i=1:6 surfPicA(i)=surf(surfPic(i).XData.*1.5,surfPic(i).YData.*1.5,surfPic(i).ZData.*1.5,... 'CData',surfPic(i).CData,'EdgeColor','none','FaceColor','interp','FaceAlpha',0.7); end %% 用來調整放大比例的矩陣 resizeMat=[2 2 2.5;2 2 2.5;2.5 2 2; 2 2.5 2;2.5 2 2;2 2.5 2]; %% 最大圖片繪制 % for i=1:6 % surfPicB(i)=surf(surfPic(i).XData.*resizeMat(i,1),... % surfPic(i).YData.*resizeMat(i,2),... % surfPic(i).ZData.*resizeMat(i,3),... % 'CData',surfPic(i).CData,'EdgeColor',... % 'none','FaceColor','interp','FaceAlpha',0.7); % end lastDis=300; preDis=300; set(fig,'WindowButtonMotionFcn',@move2center) function move2center(~,~) xy=get(fig,'CurrentPoint'); preDis=sqrt(sum((xy-[300,300]).^2)); end fps=40;theta=0; rotateTimer=timer('ExecutionMode', 'FixedRate', 'Period',1/fps, 'TimerFcn', @rotateCube); start(rotateTimer) function rotateCube(~,~) theta=theta+0.02; ax.CameraPosition=[cos(theta)*5*sqrt(2),sin(theta)*5*sqrt(2),5]; if (~all([preDis lastDis]<150))&&any([preDis lastDis]<150) for ii=1:6 if preDis<150 surfPicA(ii).XData=surfPic(ii).XData.*resizeMat(ii,1); surfPicA(ii).YData=surfPic(ii).YData.*resizeMat(ii,2); surfPicA(ii).ZData=surfPic(ii).ZData.*resizeMat(ii,3); else surfPicA(ii).XData=surfPic(ii).XData.*1.5; surfPicA(ii).YData=surfPic(ii).YData.*1.5; surfPicA(ii).ZData=surfPic(ii).ZData.*1.5; end end end lastDis=preDis; end % 棄用方案:太卡 % set(fig,'WindowButtonMotionFcn',@move2center) % function move2center(~,~) % xy=get(fig,'CurrentPoint'); % dis=sum((xy-[300,300]).^2); % for ii=1:6 % if dis<200 % surfPicA(ii).XData=surfPic(ii).XData.*resizeMat(ii,1); % surfPicA(ii).YData=surfPic(ii).YData.*resizeMat(ii,2); % surfPicA(ii).ZData=surfPic(ii).ZData.*resizeMat(ii,3); % else % surfPicA(ii).XData=surfPic(ii).XData; % surfPicA(ii).YData=surfPic(ii).YData; % surfPicA(ii).ZData=surfPic(ii).ZData; % end % end % % % % end end
到此,相信大家對“Python和Matlab怎么實現炫酷的3D旋轉圖”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。