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

目录
  • 前言
  • 1.Python爬取美女照片
    • 1.1 留恋忘返的网址
    • 1.2 Python代码
    • 1.3 结果
  • 2.Python实现
    • 2.1 条件准备
    • 2.2 运行展示
    • 2.3 Python实现
  • 3.Matlab实现
    • 3.1 运行展示
    • 3.2 Matlab代码

前言

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

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>
<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>

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;
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旋转图的文章就介绍到这了,更多相关Python Matlab3D旋转图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python Matplotlib 实现3D绘图详解

    目录 第一个三维绘图程序 3D散点图 3D等高线图 3D线框图 3D曲面图 最初开发的 Matplotlib,仅支持绘制 2d 图形,后来随着版本的不断更新, Matplotlib 在二维绘图的基础上,构建了一部分较为实用的 3D 绘图程序包,比如 mpl_toolkits.mplot3d,通过调用该程序包一些接口可以绘制 3D散点图.3D曲面图.3D线框图等 mpl_toolkits 是 Matplotlib 的绘图工具包. 第一个三维绘图程序 下面编写第一个三维绘图程序. 首先创建一个三维绘

  • Python绘制3D图形

    3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3D图形的绘制,包括3D散点.3D表面.3D轮廓.3D直线(曲线)以及3D文字等的绘制. 准备工作: python中绘制3D图形,依旧使用常用的绘图模块matplotlib,但需要安装mpl_toolkits工具包,安装方法如下:windows命令行进入到python安装目录下的Scripts文件夹下,执行: pip install --upgrade matplotlib即可:li

  • Python+Matplotlib绘制3D图像的示例详解

    目录 1. 绘制3D柱状图 2. 绘制3D曲面图 示例1 示例2 3.绘制3D散点图 4. 绘制3D曲线图 1. 绘制3D柱状图 绘制3D柱状图使用的是axes3d.bar()方法. 可能跟我们中学学的有一点不同的是,其语法如下: bar(left, height, zs=0, zdir=‘z’, *args, **kwargs) 其中left表示指向侧边的轴,zs表示指向我们的方向的轴,height即表示高度的轴.这三者都需要是一维的序列对象.在调用相关方法的时候,比如设置轴标签,还有一点需要

  • 详解Matlab绘制3D玫瑰花的方法(内附旋转版本)

    目录 1.玫瑰花绘制 绘制效果 完整代码 2.月季花绘制 绘制效果 完整代码 3.玫瑰配色 4.旋转版本 1.玫瑰花绘制 绘制效果 完整代码 function drawrose grid on [x,t]=meshgrid((0:24)./24,(0:0.5:575)./575.*20.*pi+4*pi); p=(pi/2)*exp(-t./(8*pi)); change=sin(15*t)/150; u=1-(1-mod(3.6*t,2*pi)./pi).^4./2+change; y=2*(

  • 如何用Python绘制3D柱形图

    本文主要讲解如何使用python绘制三维的柱形图,如下图 源代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D #构造需要显示的值 X=np.arange(0, 5, step=1)#X轴的坐标 Y=np.arange(0, 9, step=1)#Y轴的坐标 #设置每一个(X,Y)坐标所对应的Z轴的值,在这边Z(X,Y)=X+Y Z=np.zeros(sh

  • 利用Python绘制酷炫的3D地图

    目录 1.重庆市3D地图 2.中国3D地图一 3.中国3D地图二 4.中国3D地图三 5.地球展示 之前我们介绍了很多Python地图可视化的内容,本次主要介绍如何Python绘制3D地图,还是比较神奇的,下面让我们一起一饱眼福吧! 1.重庆市3D地图 from pyecharts import options as opts from pyecharts.charts import Map3D from pyecharts.globals import ChartType # 经纬度 exam

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

    目录 前言 1.Python爬取美女照片 1.1 留恋忘返的网址 1.2 Python代码 1.3 结果 2.Python实现 2.1 条件准备 2.2 运行展示 2.3 Python实现 3.Matlab实现 3.1 运行展示 3.2 Matlab代码 前言 我们今天的任务很明确,我先系统梳理一下: 1.先用Python爬取一波漂亮的美女照片: 2.然后Python中炫酷的代码实现: 3.最后用matlab伺候,得到相同的结果. 1.Python爬取美女照片 1.1 留恋忘返的网址 站长素材-

  • 基于Jquery和html5实现炫酷的3D焦点图动画

    这款HTML5焦点图不仅可以手动点击按钮切换图片,而且还支持自动切换图片,使用起来也相当方便.如果你需要在网站中展示产品图片,那么这款焦点图插件非常适合你. 在线演示源码下载 HTML代码 <section id="dg-container" class="dg-container"> <div class="dg-wrapper"> <a href="#"><img src=&quo

  • python绘制超炫酷动态Julia集示例

    目录 前言 Mandelbrot集 无限缩放 Julia集 前言 此Julia非彼Julia,指的是对于某复数 c c c,使得迭代式 f ( z ) = z 2 + c f(z)=z^2+c f(z)=z2+c收敛的复数 z z z的集合.例如,当 c = 0 c=0 c=0时,那么其收敛区间为 z 2 < 1 z^2<1 z2<1的单位圆,对应的 c c c的Julia集便是 cos ⁡ θ + i sin ⁡ θ \cos\theta+i\sin\theta cosθ+isinθ.

  • vue+three.js实现炫酷的3D登陆页面示例详解

    目录 前言: Three.js的基础知识 关于场景 关于光源 关于相机(重要) 关于渲染器 完善效果 创建一个左上角的地球 使地球自转 创建星星 使星星运动 创建云以及运动轨迹 使云运动 完成three.js有关效果 结语 前言: 大家好,我是xx传媒严导(xx这两个字请自行脑补) . 该篇文章用到的主要技术:vue3.three.js 我们先看看成品效果: 高清大图预览(会有些慢): 座机小图预览: 废话不多说,直接进入正题 Three.js的基础知识 想象一下,在一个虚拟的3D世界中都需要什

  • 利用Python生成Excel炫酷图表

    目录 前言 1.xlswriter库 2.生成折线图 3.生成柱状图 4.生成饼图 5.实战拓展 前言 本文对Python 自动化操作Excel并生成图表,做了详细的分析和说明 我们先来看一下python中能操作Excel的常用库对比 1.xlswriter库 XlsxWriter是一个用来写Excel2007和xlsx文件格式的python模块.它可以用来写文本.数字.公式并支持单元格格式化.图片.图表.文档配置.自动过滤等特性 优点:功能更多.文档高保真.扩展格式类型.更快并可配置 缺点:不

  • 新年快乐! javascript实现超级炫酷的3D烟花特效

    本文实例为大家分享了javascript实现3D烟花特效的具体代码,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title></title> <meta charset="utf-8"> <title>3D烟花</title> <style> html,b

  • three.js实现炫酷的全景3D重力感应

    本文实例为大家分享了three.js 全景重力感应的具体代码,供大家参考,具体内容如下 实现three.js 全景图 demo 使用three.js 写了球体和圆柱体版本的3D重力感应全景图,支持手指触摸和陀螺仪感应,也支持PC端的鼠标.给大家介绍一下基于移动端H5球体的实现方法,圆柱体类似. 设置容器和展示的样式 设置容器的宽高为全屏展示,清除body的margin,引用three.min.js(3D渲染框架) 和orienter.js (陀螺仪经纬度计算) <div id="Canva

  • 使用three.js实现炫酷的酸性风格3D页面效果

    本文内容主要介绍,通过使用React+three.js技术栈,加载3D模型.添加3D文字.增加动画.点击交互等,配合样式设计,实现充满设计感的

  • react-three-fiber实现炫酷3D粒子效果首页

    目录 背景 Three.js工作原理 场景(Scene) 相机(Camera) 渲染器(renderer) 网格对象(mesh) react-three-fiber 画布(Canvas) 3D粒子模型构建 实现思路 定义buffer几何体,并填充数据 将buffer几何体包裹在点模型中,并为每个点引入材质 加入旋转动画 最后呈现结果 背景 初学者怎么用react-three-fiber实现一个炫酷粒子效果的首页 Three.js工作原理 场景(Scene).相机(Camera)和渲染器(Rend

  • JS+canvas画布实现炫酷的旋转星空效果示例

    本文实例讲述了JS+canvas画布实现炫酷的旋转星空效果.分享给大家供大家参考,具体如下: canvas是html5的新标签,其画布功能尤为强大.当然了canvas在IE10以下浏览器是不兼容的,所以呢为了特效肯定是牺牲一定的兼容性.这里呢,分享一个基于canvas开发的浩瀚星河插件,其实这个源代码是网上下载的,我把它整合了一下,重新封装一些参数提供更多的可改项. 首先引入两个javascript脚本,一个是jquery插件,另一个是封装好的cosmos_canvas.js <script s

随机推荐