首页 > 脚本专栏 > python > Python Matlab3D旋转图

Python&Matlab实现炫酷的3D旋转图

作者:电力系统与算法之美

这篇文章主要为大家介绍了如何利用Python和Matlab分别实现酷炫的3D旋转图,文中的示例代码讲解详细,感兴趣的可以了解一下

我们今天的任务很明确,我先系统梳理一下:

1.先用Python爬取一波漂亮的美女照片;

2.然后Python中炫酷的代码实现;

3.最后用matlab伺候,得到相同的结果。

1.Python爬取美女照片

1.1 留恋忘返的网址

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

1.2 Python代码

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

1.3 结果

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

2.Python实现

2.1 条件准备

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

2.2 运行展示

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

2.3 Python实现

<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS3制作3D图片立方体旋转特效</title>
<link rel="stylesheet" href="css/index.css" rel="external nofollow" >
</head>
<!--/*外层最大容器*/-->
<div class="wrap">
<!--	/*包裹所有元素的容器*/-->
<div class="cube">
	<!--前面图片 -->
	<div class="out_front">
		<img src="img/1.jpg" class="pic">
	<!--后面图片 -->
	<div class="out_back">
		<img src="img/2.jpg" class="pic">
	<!--左图片 -->
	<div class="out_left">
		<img src="img/3.jpg" class="pic">
	<!--右图片 -->
	<div class="out_right">
		<img src="img/4.jpg" class="pic">
	<!--上图片 -->
	<div class="out_top">
		<img src="img/5.jpg" class="pic">
	<!--下图片 -->
	<div class="out_bottom">
		<img src="img/6.jpg" class="pic">
	<!--小正方体 --> 
	<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>
</body>
</html>

3.Matlab实现

3.1 运行展示

动态视频:

3.2 Matlab代码

%====欢迎关注关注号:电力系统与算法之美
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;
%% 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);  
%% 用来调整放大比例的矩阵
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));
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);
                    surfPicA(ii).XData=surfPic(ii).XData.*1.5;
                    surfPicA(ii).YData=surfPic(ii).YData.*1.5;
                    surfPicA(ii).ZData=surfPic(ii).ZData.*1.5;
        lastDis=preDis;
% 弃用方案:太卡
% 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

到此这篇关于Python&Matlab实现炫酷的3D旋转图的文章就介绍到这了,更多相关Python Matlab3D旋转图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
  • Python 类方法和静态方法之间的区别
    Python 类方法和静态方法之间的区别
    2022-07-07
  • Python之Numpy 常用函数总结
    Python之Numpy 常用函数总结
    2022-07-07
  • Python中xlsx文件转置操作详解(行转列和列转行)
    Python中xlsx文件转置操作详解(行转列和列转行)
    2022-07-07
  • Python selenium find_element()示例详解
    Python selenium find_element()示例详解
    2022-07-07
  • 关于Python下的Matlab函数对应关系(Numpy)
    关于Python下的Matlab函数对应关系(Numpy)
    2022-07-07
  • python实现自动生成C++代码的代码生成器
    python实现自动生成C++代码的代码生成器
    2022-07-07
  • python开发任意表达式求值全功能示例
    python开发任意表达式求值全功能示例
    2022-07-07
  • Python推导式数据处理方式
    Python推导式数据处理方式
    2022-07-07
  • 美国设下计谋,用娘炮文化重塑日本,已影响至中国
    美国设下计谋,用娘炮文化重塑日本,已影响至中国
    2021-11-19
  • 时空伴随者是什么意思?时空伴随者介绍
    时空伴随者是什么意思?时空伴随者介绍
    2021-11-09
  • 工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    工信部称网盘企业免费用户最低速率应满足基本下载需求,天翼云盘回应:坚决支持,始终
    2021-11-05
  • 2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2022年放假安排出炉:五一连休5天 2022年所有节日一览表
    2021-10-26
  • 电脑版 - 返回首页

    2006-2023 脚本之家 JB51.Net , All Rights Reserved.
    苏ICP备14036222号