千家信息网

Python和Matlab怎么实现炫酷的3D旋转图

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,本篇内容主要讲解"Python和Matlab怎么实现炫酷的3D旋转图",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python和Matlab怎么实现炫酷的
千家信息网最后更新 2025年01月16日Python和Matlab怎么实现炫酷的3D旋转图

本篇内容主要讲解"Python和Matlab怎么实现炫酷的3D旋转图",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"Python和Matlab怎么实现炫酷的3D旋转图"吧!

1.Python爬取美女照片

1.1 留恋忘返的网址

站长素材-分享综合设计素材的平台 (chinaz.com)

1.2 Python代码

 #~~~~欢迎关注公众号:电力系统与算法之美~~~~~~~~~~~~· #~~~~~~~~~导入相关库~~~~~~~~~~~~~~~~~~~~·import urllib.requestfrom 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)

1.3 结果

温馨提示:meinv这个文件夹是提前建立的。

2.Python实现

2.1 条件准备

由1中爬取的照片,我们就可以为接下来的事做准备啦。选取十二张照片,如图:

2.2 运行展示

运行出来比下面这个还炫酷:

2.3 Python实现

CSS3制作3D图片立方体旋转特效

3.Matlab实现

3.1 运行展示

动态视频:

3.2 Matlab代码

%====欢迎关注关注号:电力系统与算法之美function wlz3dpath='.\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旋转图"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

0