如何用Python把篮球和鸡联系起来

news2024/9/24 7:24:53

文章目录

    • 画个球
    • 让球转起来

画个球

不管篮球和不和鸡联系起来,都首先得有个球,或者说要有一个球面,用参数方程可以表示为

x = r cos ⁡ ϕ cos ⁡ θ y = r cos ⁡ ϕ sin ⁡ θ z = r sin ⁡ ϕ \begin{aligned} x &= r\cos\phi\cos\theta\\ y &= r\cos\phi\sin\theta\\ z &= r\sin\phi \end{aligned} xyz=rcosϕcosθ=rcosϕsinθ=rsinϕ

当然,有球还不行,还得有篮球。篮球其实很好画,只要在球上加两个背带就可以了,这一点可以用Python来实现,但考虑到方便,还是用PS直接P了一下,希望最后画出来不是太离谱。

那么现在球有了,还必须得有鸡,所以在百度上找一只。然后把这只鸡映射到球面上。

在这里插入图片描述

接下来就是关键步骤,如何将这个平面卷成一个球?方法也很简单,只需进行颜色映射就行了。

import numpy as np
import matplotlib.pyplot as plt
path = "bracken1.jpg"
img = plt.imread(path)
#img = img[::5, ::5, :]
h, w, c = img.shape
ys, xs = np.indices([h, w])
th = xs/w*np.pi*2
phi = np.pi/2 - ys/h*np.pi

x = np.cos(phi)*np.cos(th)
y = np.cos(phi)*np.sin(th)
z = np.sin(phi)

cs = [tuple(c/255) for c in img.reshape(-1,3)]
ax = plt.subplot(projection='3d')
ax.scatter(x, y, z, marker='.', c=cs)
plt.axis('off')
plt.show()

效果为

在这里插入图片描述

让球转起来

当然需要注意的一个是,这是个球,而不是一个圆,所以下面让这个球转一下。想要让球转动,那就得有一个旋转矩阵,三个方向的旋转矩阵如下表

R x ( θ ) R_x(\theta) Rx(θ) R x ( θ ) R_x(\theta) Rx(θ) R x ( θ ) R_x(\theta) Rx(θ)
[ 1 0 0 0 C θ − S θ 0 S θ C θ ] \begin{bmatrix}1&0&0\\0&C_\theta&-S_\theta\\0&S_\theta&C_\theta\\\end{bmatrix} 1000CθSθ0SθCθ [ C θ 0 S θ 0 1 0 − S θ 0 C θ ] \begin{bmatrix}C_\theta&0 &S_\theta\\0&1&0\\-S_\theta&0&C_\theta\\\end{bmatrix} Cθ0Sθ010Sθ0Cθ [ C θ S θ 0 − S θ C θ 0 0 0 1 ] \begin{bmatrix}C_\theta &S_\theta&0\\-S_\theta&C_\theta&0\\0&0&1\end{bmatrix} CθSθ0SθCθ0001

由于只需绕Z轴转动,所以代码如下

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import animation

cos = lambda th : np.cos(np.deg2rad(th))
sin = lambda th : np.sin(np.deg2rad(th))

Rz = lambda th : np.array([
    [cos(th) , -sin(th), 0],
    [sin(th), cos(th), 0],
    [0       , 0,       1]])

xyz = np.array([x,y,z]).reshape(3,-1)

fig = plt.figure(figsize=(5,5))
ax = fig.add_subplot(projection='3d')
ax.grid()

lines = ax.scatter(x, y, z, marker='.', c=cs)

def animate(n):
    # 按照xyz顺序旋转
    axis = [2,1,0]
    shape = xyz.shape
    lines._offsets3d = Rz(n)@xyz
    return lines,

ani = animation.FuncAnimation(fig, animate, 
    range(0, 360, 2), interval=25, blit=True)

#plt.show()
ani.save("zyx.gif")

效果如下,还挺有喜感的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382863.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32 EXTI外部中断

本文代码使用 HAL 库。 文章目录前言一、什么是外部中断?二、外部中断中断线三、STM32F103的引脚复用四、相关函数:总结前言 一、什么是外部中断? 外部中断 是单片机实时地处理外部事件的一种内部机制。当某种外部事件发生时,单片…

13 nuxt3学习(新建页面 内置组件 assets 路由)

新建页面 Nuxt项目中的页面是在 pages目录 下创建的 在pages目录创建的页面,Nuxt会根据该页面的目录结构和其文件名来自动生成对应的路由。页面路由也称为文件系统路由器(file system router),路由是Nuxt的核心功能之一 方式一…

DHTMLX Suite 8.0 重大发布,新增更多新主题、热图图表、辅助功能支持功能

DHTMLX Suite 是一个用于构建跨浏览器Web应用和移动应用的强大JavaScript UI库。DHTMLX UI 组件库允许您更快地构建跨平台、跨浏览器 Web 和移动应用程序。它包括一组丰富的即用式 HTML5 组件,这些组件可以轻松组合到单个应用程序界面中。 DHTMLX Spreadsheet正版试…

动态网站开发讲课笔记04:Servlet基础

文章目录零、本节学习目标一、Servlet基础(一)Servlet概述1、Servlet是什么2、Servlet容器3、Servlet应用程序的体系结构(二)Servlet的特点1、功能强大2、可移植3、性能高效4、安全性高5、可扩展(三)Servle…

数据结构刷新知识总结,为了与题目分开,特地在这里开一篇博客

文章目录二叉树、树、森林的转换二叉树的五个特性常用算法总结常用算法详解图的概念堆排序哈希查找二叉树、树、森林的转换 树转二叉树 二叉树转树 森林转二叉树 二叉树转森林 二叉树的五个特性 性质1:在二叉树的第i层上至多有2i-1个结点性质2:深度为…

Android动态获取权限(详细教程附代码)

Android动态获取权限概述动态获取权限具体实现layout布局代码回调函数onRequestPermissionsResult权限判断工具类清单文件方式一:懒汉式方式二:饿汉式概述 如果是android6.0以下的版本,只需要在manifest声明对应的权限即可。但是这样会大大降…

美颜sdk动态贴纸的实现流程

随着移动互联网时代的到来,各式各样的 APP层出不穷,从最初的微信、 QQ到如今的抖音、快手等等,再到如今的微博、小红书等等,各式各样的 APP不断涌现。从最开始简单的图片展示到视频聊天,再到现如今丰富多样的各种动态贴…

rip题解

1.查看文件保护机制 使用的是新版本的checksec 2.拖入IDA分析 查壳 是一个64文件,拖入64位IDA 这个文件就是我们要攻击的服务器中的一个进程的代码,进程就是一个正在运行的程序 分析敏感函数 打开字符串窗口 跟进,光标点在command&#x…

Linux: ARM GIC只中断CPU 0问题分析

文章目录1. 前言2. 分析背景3. 问题4. 分析4.1 ARM GIC 中断芯片简介4.1.1 中断类型和分布4.1.2 拓扑结构4.2 问题根因4.2.1 设置GIC SPI 中断CPU亲和性4.2.2 GIC初始化:缺省的CPU亲和性4.2.2.1 boot CPU亲和性初始化流程4.2.2.1 其它非 boot CPU亲和性初始化流程5.…

【微信小程序】-- 全局配置 -- window - 下拉刷新 上拉触底(十六)

💌 所属专栏:【微信小程序开发教程】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &…

模型实战(6)之Alex实现图像分类:模型原理+训练+预测(详细教程!)

Alex实现图像分类:模型原理+训练+预测 图像分类或者检索任务在浏览器中的搜索操作、爬虫搜图中应用较广,本文主要通过Alex模型实现猫狗分类,并且将可以复用的开源模型在文章中给出!!!数据集可以由此下载:Data本文将从以下内容做出讲述: 1.模型简介及环境搭建2.数据集准…

微纳制造期末复习

章节分为六个模块: 1. 微纳制造中的材料 2.光刻技术 3.微纳制造中使用的技术 4.刻蚀 5.沉积 7.微纳刻蚀 根据导电性区分材料:导体,半导体,绝缘体 晶体:长程有序 多晶:短程有序 非晶:无序…

八 SpringMVC【拦截器】登录验证

目录🚩一 SpringMVC拦截器✅ 1.配置文件✅2.登录验证代码(HandlerInterceptor)✅3.继承HandlerInterceptorAdapter(不建议使用)✅4.登录页面jsp✅5.主页面(操作页面)✅6.crud用户在访问页面时 只…

【算法】PatchMatch立体匹配算法_原理解析

目录 前言 原理解析 1.倾斜支持窗口(Slanted Support Windows) 什么是视差平面? 为什么视差和像素坐标点之间的关系可以解释为平面方程? 视差平面的通用参数方程和点加法向量方程 什么是倾斜支持窗口? 2.基于倾…

宏基因组鉴定病毒流程中需要的生物信息工具

谷禾健康 许多流行病的爆发都是病毒引起的,面对新的传染性基因组出现的最佳策略是及时识别,以便于在感染开始时立即实施相应措施。 目前可用的诊断测试仅限于检测新的病理因子。适用于同时检测存在的任何病原体的高通量方法可能比使用基于当前方法的大量…

Mel Spectrogram

参考链接: Short-time Fourier transform - MATLAB stft- MathWorks 中国 https://medium.com/analytics-vidhya/understanding-the-mel-spectrogram-fca2afa2ce53 a spectrogram as a bunch of FFTs stacked on top of each other. 给出hop length后&#xff0…

TMP耗时较高的优化问题

1)TMP耗时较高的优化问题 ​2)Unity重载Object后,如何判定物体是否为空 3)SRP Batch在添加unity_SpecCube后的问题 4)堆内存会持续上升,如何用UWA报告来分析 这是第326篇UWA技术知识分享的推送,…

大话数据结构-栈

1 概述 栈(Stack)是限定仅在表尾进行插入和删除操作的线性表。 允许插入和删除的一端称为栈顶(top),另一端称为栈底(bottom),不含任何数据元素的栈称为空栈,栈又称为后进…

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(三)

DevExpress WinForm拥有180组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序,无论是Office风格的界面,还是分析处理大批量的业务数据,它都能轻松胜任…

MyBatisPlus Study Notes

文章目录1 MyBatisPlus概述1.1 MyBatis介绍1.2 MyBatisPlus特性2 标准数据层开发2.1 MyBatisPlus的CRUD操作API2.2 分页功能接口实现2.2.1 config(配置层)拦截器实现2.2.2 Dao(Mapper)数据访问层(CRUD)操作2.2.3 Junit单元测试进行…