iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >基于Python实现绘制一个足球
  • 254
分享到

基于Python实现绘制一个足球

Python绘制足球Python足球 2023-02-24 17:02:11 254人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前情提要先画六边形再画五边形前情提要 如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用python绘制正二十面体 其核心代码为 import numpy as np fro

前情提要

如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用python绘制正二十面体

其核心代码为

import numpy as np
from itertools import product
G = (np.sqrt(5)-1)/2
def 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 dMat

pts = 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)==3

from 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) => Matrix
Rx = 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]])

最后得到的正二十面体为

先画六边形

足球其实就是正二十面体削掉顶点,正二十面体有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")

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

再画五边形

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

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足球的资料请关注编程网其它相关文章!

--结束END--

本文标题: 基于Python实现绘制一个足球

本文链接: https://www.lsjlt.com/news/197484.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • 基于Python实现绘制一个足球
    目录前情提要先画六边形再画五边形前情提要 如果想优雅地绘制一个足球,那首先需要绘制正二十面体:用Python绘制正二十面体 其核心代码为 import numpy as np fro...
    99+
    2023-02-24
    Python绘制足球 Python足球
  • 基于Python如何实现绘制一个足球
    今天小编给大家分享一下基于Python如何实现绘制一个足球的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。前情提要其核心代码为...
    99+
    2023-07-05
  • Python基于欧拉角绘制一个立方体
    目录先画个立方体欧拉角和旋转矩阵初步演示不同转动顺序的影响旋转演示先画个立方体 工欲善其事、必先利其器,在开始学习欧拉角模拟之前,可先绘制一个立方体。 在matplotlib中,这个...
    99+
    2023-02-27
    Python欧拉角绘制立方体 Python绘制立方体 Python欧拉角
  • 基于Python绘制一个摸鱼倒计时界面
    目录前言实现过程前言 前段时间在微博看到一段摸鱼人的倒计时模板,感觉还挺有趣的。 于是我用了一小时的时间写了个页面出来 摸鱼办地址 (当然是摸鱼的时间啦)。 模板是这样的: 摸鱼办...
    99+
    2024-04-02
  • 基于Python+Matplotlib实现直方图的绘制
    目录1.关于直方图2.plt.hist()3. 绘制一幅简单的 频数 分布直方图4. 绘制一幅 频率 分布直方图5. 累积分布直方图(水平方向)1.关于直方图 直...
    99+
    2024-04-02
  • Python基于欧拉角怎么绘制一个立方体
    本文小编为大家详细介绍“Python基于欧拉角怎么绘制一个立方体”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python基于欧拉角怎么绘制一个立方体”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。先画个立方体工...
    99+
    2023-07-05
  • 基于Python实现绘制属于你的世界地图
    目录1.准备2.简单地图3.世界地图Python之所以这么流行,是因为它不仅能够应用于科技领域,还能用来做许多其他学科的研究工具,绘制地图便是其功能之一。 今天我们用matplot工...
    99+
    2022-11-13
    Python绘制世界地图 Python世界地图 Python 地图
  • 基于Python实现流星雨效果的绘制
    目录1 前言2 霍金说移民外太空3 浪漫的流星雨展示 4 Python代码 1 前言 我们先给个小故事,提一下大家兴趣;然后我给出论据,得出结论。最后再浪漫的流星...
    99+
    2024-04-02
  • 如何基于Python绘制一个摸鱼倒计时界面
    这篇文章将为大家详细讲解有关如何基于Python绘制一个摸鱼倒计时界面,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实现过程首先要知道、除了静态文字之外的比如当前日期、距离节日放假的天数等都是动态返回的,...
    99+
    2023-06-22
  • Python实现绘制3D地球旋转效果
    目录画一个地球让地球转起来画一个地球 想画一个转动的地球,那么首先要有一个球,或者说要有一个球面,用参数方程可以表示为 x​=rcosϕcosθ y=rcosϕsin&t...
    99+
    2023-02-28
    Python实现3D地球旋转效果 Python 地球旋转 Python 地球
  • C++ OpenGL实现球形的绘制
    目录1、封装Shader(1)为什么要封装Shader(2)如何使用2、绘制球模型(1)球面顶点遍历(2)构造三角形图元(3)开启线框模式(4)开启面剔除(5)最后1、封装Shade...
    99+
    2024-04-02
  • 基于Python+Matplotlib怎么实现直方图的绘制
    今天小编给大家分享一下基于Python+Matplotlib怎么实现直方图的绘制的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧...
    99+
    2023-06-30
  • 基于Python+Turtle实现绘制简易的大风车
    目录前言Turtle绘制大风车保存为jpg图片绘制不同角度的图片图片合成 gif 动图前言 大风车,吱呀吱呦呦地转, 这里的风景呀真好看!天好看,地好看…&hellip...
    99+
    2024-04-02
  • 基于Matlab实现山脊图的绘制
    目录纯色山脊图模板渐变色山脊图模板写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板: 纯色山脊图模...
    99+
    2024-04-02
  • 基于WPF绘制一个点赞大拇指动画
    目录效果图实现思路完整代码效果图 好久没有写wpf了。 最近看到飞书的点赞动画非常有意思,决定试试,虽然不及飞书那样的绚丽,但是练手还是可以的,希望自己的手艺还在! 实现思路 那么...
    99+
    2023-02-13
    WPF绘制点赞动画 WPF点赞动画 WPF 动画
  • 基于QT绘制一个漂亮的预警仪表
    以下是用Qt实现漂亮预警仪表的步骤和代码: 1.创建一个Qt项目,并添加一个主窗口。 2.在主窗口中添加QGraphicsView控件,用于绘制预警仪表。 3.创建一个QGraphi...
    99+
    2023-05-14
    QT绘制预警仪表 QT预警仪表 QT仪表
  • Android 贝塞尔曲线绘制一个波浪球
    目录前言一、绘制 backgroundColor 文本二、构建 circlePath三、绘制波浪线四、取交集五、绘制 foregroundColor 文本六、添加动画七、使用前言 当...
    99+
    2024-04-02
  • Python+Pygame实现趣味足球游戏
    目录导语一、环境安装 二、代码展示三、效果展示1)加载界面2)开始游戏界面3)开始游戏​4)游戏运行导语 ​足球运动有着“世界第一运动”的美称,还是...
    99+
    2024-04-02
  • Python如何实现绘制3D地球旋转效果
    这篇“Python如何实现绘制3D地球旋转效果”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Python如何实现绘制3D地球...
    99+
    2023-07-05
  • 基于RecyclerChart的KLine绘制Volume实现详解
    目录正文创建AttacheChart YAxisAttache Chart绘制正文 本章节是基于RecyclerChart的KLine 绘制第三章节,底部AttacheChart ...
    99+
    2023-03-03
    RecyclerChart KLine绘制Volume RecyclerChart KLine绘制
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作