我的编程空间,编程开发者的网络收藏夹
学习永远不晚

基于Python如何实现绘制一个足球

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

基于Python如何实现绘制一个足球

今天小编给大家分享一下基于Python如何实现绘制一个足球的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

前情提要

其核心代码为

import numpy as npfrom itertools import productG = (np.sqrt(5)-1)/2def getVertex():    pt2 =  [(a,b) for a,b in product([1,-1], [G, -G])]    pts =  [(a,b,0) for a,b in pt2]    pts += [(0,a,b) for a,b in pt2]    pts += [(b,0,a) for a,b in pt2]    return np.array(pts)def getDisMat(pts):    N = len(pts)    dMat = np.ones([N,N])*np.inf    for i in range(N):        for j in range(i):            dMat[i,j] = np.linalg.norm([pts[i]-pts[j]])    return dMatpts = getVertex()dMat = getDisMat(pts)# 由于存在舍入误差,所以得到的边的数值可能不唯一ix, jx = np.where((dMat-np.min(dMat))<0.01)# 获取正二十面体的边edges = [pts[[i,j]] for i,j in zip(ix, jx)]def isFace(e1, e2, e3):    pts = np.vstack([e1, e2, e3])    pts = np.unique(pts, axis=0)    return len(pts)==3from itertools import combinations# 获取正二十面体的面faces = [es for es in combinations(edges, 3)     if isFace(*es)]

为了克服plot_trisurf在xy坐标系中的bug,需要对足球做一点旋转,所以下面要写入旋转矩阵。

# 将角度转弧度后再求余弦cos = lambda th : np.cos(np.deg2rad(th))sin = lambda th : np.sin(np.deg2rad(th))# 即 Rx(th) => MatrixRx = lambda th : np.array([    [1, 0,       0],    [0, cos(th), -sin(th)],    [0, sin(th), cos(th)]])Ry = lambda th : np.array([    [cos(th),  0, sin(th)],    [0      ,  1, 0],    [-sin(th), 0, cos(th)]])Rz = lambda th : np.array([    [cos(th) , sin(th), 0],    [-sin(th), cos(th), 0],    [0       , 0,       1]])

最后得到的正二十面体为

基于Python如何实现绘制一个足球

先画六边形

足球其实就是正二十面体削掉顶点,正二十面体有20个面和12个顶点,每个面都是三角形。削掉顶点对于三角形而言就是削掉三个角,如果恰好选择在1/3的位置削角,则三角形就变成正六边形;而每个顶点处刚好有5条棱,顶点削去之后就变成了正五边形。

而正好足球的六边形和五边形有着不同的颜色,所以可以分步绘制,先来搞定六边形。

由于此前已经得到了正二十面体的所有面,同时还有这个面对应的所有边,故而只需在每一条边的1/3 和2/3处截断,就可以得到足球的正六边形。

def getHexEdges(face):    pts = []    for st,ed in face:        pts.append((2*st+ed)/3)        pts.append((st+2*ed)/3)    return np.vstack(pts)ax = plt.subplot(projection='3d')for f in faces:    pt = getHexEdges(f)    pt = Rx(1)@Ry(1)@pt.T    ax.plot_trisurf(*pt, color="white")

于是,一个有窟窿的足球就很轻松地被画出来了

基于Python如何实现绘制一个足球

再画五边形

接下来要做的是,将五边形的窟窿补上,正如一开始说的,这个五边形可以理解为削去顶点而得到的,所以第一件事,就是要找到一个顶点周围的所有边。具体方法就是,对每一个顶点遍历所有边,如果某条边中存在这个顶点,那么就把这个边纳入到这个顶点的连接边。

def getPtEdges(pts, edges):    N = len(pts)    pEdge = [[] for pt in pts]    for i,e in product(range(N),edges):        if (pts[i] == e[0]).all():             pt = (2*pts[i]+e[1])/3        elif (pts[i] == e[1]).all():             pt = (2*pts[i]+e[0])/3        else:            continue        pEdge[i].append(pt)    return np.array(pEdge)pEdge = getPtEdges(pts, edges)

接下来,就可以绘制足球了

ax = plt.subplot(projection='3d')for f in faces:    pt = getHexEdges(f)    pt = Rx(1)@Ry(1)@pt.T    ax.plot_trisurf(*pt, color="white")for pt in pEdge:    pt = Rx(1)@Ry(1)@pt.T    ax.plot_trisurf(*pt, color="black")plt.show()

效果为

基于Python如何实现绘制一个足球

以上就是“基于Python如何实现绘制一个足球”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

基于Python如何实现绘制一个足球

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

基于Python如何实现绘制一个足球

今天小编给大家分享一下基于Python如何实现绘制一个足球的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前情提要其核心代码为
2023-07-05

基于Python实现绘制一个足球

这篇文章主要为大家详细介绍了如何基于Python实现绘制一个简单的足球,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的可以尝试一下
2023-02-24

如何基于Python绘制一个摸鱼倒计时界面

这篇文章将为大家详细讲解有关如何基于Python绘制一个摸鱼倒计时界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现过程首先要知道、除了静态文字之外的比如当前日期、距离节日放假的天数等都是动态返回的,
2023-06-22

Python基于欧拉角绘制一个立方体

这篇文章主要为大家详细介绍了Python如何基于欧拉角实现绘制一个立方体,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
2023-02-27

Python如何实现绘制3D地球旋转效果

这篇“Python如何实现绘制3D地球旋转效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python如何实现绘制3D地球
2023-07-05

基于Python如何绘制世界地图

本篇内容介绍了“基于Python如何绘制世界地图”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.准备开始之前,你要确保Python和pip
2023-07-04

Python基于欧拉角怎么绘制一个立方体

本文小编为大家详细介绍“Python基于欧拉角怎么绘制一个立方体”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于欧拉角怎么绘制一个立方体”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先画个立方体工
2023-07-05

基于Python实现绘制属于你的世界地图

Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,绘制地图便是其功能之一。本文我们将用matplot工具包之一的mpl_toolkits来绘制世界地图,需要的可以参考一下
2022-11-13

基于Echarts如何实现绘制立体柱状图

本篇内容主要讲解“基于Echarts如何实现绘制立体柱状图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Echarts如何实现绘制立体柱状图”吧!实现方法先写一个常规的柱状图在这个基础上进行
2023-07-05

基于Python如何绘制流星雨效果

今天小编给大家分享一下基于Python如何绘制流星雨效果的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。浪漫的流星雨展示 4
2023-06-29

基于C#如何实现在图片上绘制文字

本篇内容介绍了“基于C#如何实现在图片上绘制文字”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果代码public partial clas
2023-07-04

基于Python+Matplotlib怎么实现直方图的绘制

今天小编给大家分享一下基于Python+Matplotlib怎么实现直方图的绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧
2023-06-30

基于Python+Turtle怎么实现绘制简易的大风车

本篇内容主要讲解“基于Python+Turtle怎么实现绘制简易的大风车”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“基于Python+Turtle怎么实现绘制简易的大风车”吧!Turtle绘制
2023-07-01

python如何使用tkinter实现透明窗体上绘制随机出现的小球

这篇文章主要介绍了python如何使用tkinter实现透明窗体上绘制随机出现的小球,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、画个大球看看(一)核心代码在on_res
2023-06-15

Python如何实现绘制多角星

这篇文章主要为大家展示了“Python如何实现绘制多角星”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现绘制多角星”这篇文章吧。一、引言在具备一定的Python编程基础以后,我
2023-06-25

如何用Python绘制一个仿黑洞图像

本篇内容主要讲解“如何用Python绘制一个仿黑洞图像”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Python绘制一个仿黑洞图像”吧!单位制利用einsteinpy模块中的Shadow类
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录