3D绘制爱心(python)

news2024/11/18 3:32:23

目录

  • 图像绘制代码
  • 结果显示
  • 参考

图像绘制代码

import time
import numpy as np
import matplotlib.pyplot as plt


class Guess:
    def __init__(self, bbox=(-1.5, 1.5), resolution=50, lines=20, scale=1.2) -> None:
        """
               bbox: 控制画格的大小
               resolution: 控制爱心的分辨率
               lines: 控制等高线的数量
                scale: 心脏缩放的系数
               """
        self.xmin, self.xmax, self.ymin, self.ymax, self.zmin, self.zmax = bbox * 3
        plt.ion()# 开启画布动态模式
        self.scale = scale
        # scale: 心脏缩放的系数 设置为全局变量
        self.time = time.time()
        A = np.linspace(self.xmin, self.xmax, resolution)
        self.B = np.linspace(self.xmin, self.xmax, lines)
        self.A1, self.A2 = np.meshgrid(A, A)

    def coordinate(self, x, y, z):
        return (x ** 2 + (9 / 4) * y ** 2 + z ** 2 - 1) ** 3 - x ** 2 * z ** 3 - (9 / 80) * y ** 2 * z ** 3

    def draw(self, ax, coef):
        # coef: 使得心脏可以按照时间跳动
        for z in self.B:
            X, Y = self.A1, self.A2
            Z = self.coordinate(X, Y, z) + z
            cset = ax.contour(X * coef, Y * coef, Z * coef, [z * coef], zdir='z', colors=('pink',))

        for y in self.B:
            X, Z = self.A1, self.A2
            Y = self.coordinate(X, y, Z) + y
            cset = ax.contour(X * coef, Y * coef, Z * coef, [y * coef], zdir='y', colors=('pink',))

        for x in self.B:
            Y, Z = self.A1, self.A2
            X = self.coordinate(x, Y, Z) + x
            cset = ax.contour(X * coef, Y * coef, Z * coef, [x * coef], zdir='x', colors=('pink',))

    def run(self, count):
        #加入count是我们想循环的次数
        fig = plt.figure()
        for i in range(count):
            plt.clf()# 每次清除画布
            ax = fig.add_subplot(projection='3d')
            ax.set_title("2luyao")
            ax.set_zlim3d(self.zmin, self.zmax)
            ax.set_xlim3d(self.xmin, self.xmax)
            ax.set_ylim3d(self.ymin, self.ymax)
            times = time.time() - self.time    # 计算画布的当前时间状态
            ax.view_init(10, 100 + np.cos(times) * 10)# 让三维坐标图可以变换坐标展示
            # coef 是用来放缩心脏的大小的,加入cos来使它有节奏的跳动
            coef = np.cos(times) * (self.scale - 1) + 1
            self.draw(ax, coef)
            plt.pause(0.1)  # 让绘制出来的心脏可以显示
            plt.show()


if __name__ == '__main__':
    demo = Guess()
    demo.run(50)

结果显示

在这里插入图片描述
这是一个动态的爱心,可以试验一下

参考

https://blog.csdn.net/qq_44961028/article/details/127778513

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

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

相关文章

6. WebGPU 纹理(Textures )

在本文中,我们将介绍纹理的基础知识。在之前的文章中,我们介绍了 将数据传递到着色器的主要方法,它们是inter-stage variables, uniforms, storage-buffers, and vertex-buffers。将数据传递到着色器的最后一种主要方式是纹理。 纹理通常表示…

北宋文坛伯乐的传承关系

北宋的科学文化水平达到了古代最高峰,文化繁荣,名人辈出,涌现出了一大批大文豪,文坛领袖,词派宗祖等大师级的人物。例如, “宰相词人”晏殊、“两宋三百年来第一人”的范仲淹、“唐宋散文八大家”中的欧阳修…

java版本工程项目管理系统源码-简洁+好用+全面-工程项目管理

​工程项目管理系统是指从事工程项目管理的企业(以下简称工程项目管理企业)受业主委托,按照合同约定,代表业主对工程项目的组织实施进行全过程或若干阶段的管理和服务。 ​系统定义 工程项目管理企业不直接与该工程项目的总承包企…

swagger实现在线接口文档

一、前言 之前换了新的单位后,单位的项目有使用到swagger,那个时候觉得这个好方便,后面是建立在他们搭建好的基础上使用一些swagger的注解,但一直想要自己去实现,奈何没有机会,这次机会终于来了&#xff0…

《楚天法治》期刊简介及投稿邮箱

《楚天法治》期刊简介及投稿邮箱 《楚天法治》杂志为半月刊,是一本以关注法制热点、推进法治建设、促进法治社会和谐发展为宗旨的法制类专业期刊。 主管单位:湖北日报传媒集团 主办单位:湖北日报楚天传媒(集团)有限…

解析kubernetes部署:微信配置文件部署

微信安全配置文件 以下两步二选一 一、暂时没有微信配置文件 1、创建configmap kubectlcreateconfigmapweixin-config--from-file/opt/kubernetes/weixin/weixin-mp.txt--namespacens-javashop 2、创建微信配置文件service(执行如下命令) kubectlcreate-f/opt/kubernetes/weix…

魅族20 INFINITY首销在即:比魅族20 Pro贵2200元,究竟有啥区别?

这两天又有一款高端手机要开售了,这款手机就是魅族20 INFINITY无界版,手机其实早早就已经发布,只不过一直没开售。从配置来说,这款手机也是采用了骁龙8 Gen2芯片,目前只有12GB256GB版一个规格,和魅族20 Pro…

WPF开发txt阅读器7:自定义文字和背景颜色

文章目录 添加控件具体实现代码说明 txt阅读器系列: 需求分析和文件读写目录提取类💎列表控件与目录字体控件绑定书籍管理系统💎用树形图管理书籍 添加控件 除了字体、字体大小之外,文字和背景颜色也会影响阅读观感&#xff0c…

k8s中的PVC为何需要延迟绑定?(WaitForFirstConsumer)

文章目录 背景为什么需要延迟绑定延迟绑定的原理storgeageClass yaml配置 背景 有一个pod, 使用的pvc叫pvc-1, 我们希望它只运行在node-2上,在当前的集群中存在两台主机符合pod的pvc的要求, 假如node-1上是pv-1, node-2上是pv-2,…

stm32读取DHT11温湿度传感器

stm32读取DHT11温湿度传感器 一.序言二.DHT11响应数据格式三.DHT11通讯过程3.1 产生起始信号3.2 读取数据03.3 读取数据1DHT11停止信号 四.代码实例4.1读取DHT11源文件4.2 读取DHT11头文件 五.结语5.1 总结整体思路5.2 对读者的期望 一.序言 我们知道DHT11是单总线协议&#x…

单体、SOA、微服务的介绍

本文涉及的内容以及知识点如下: 1、单体架构 2、单体架构的拆分 3、SOA与微服务的区别 4、微服务的优缺点 5、微服务的消息 6、服务集成 7、数据的去中心化 目录 单体架构单体架构的拆分 SOA与微服务 微服务的优缺点微服务消息服务集成数据去中心化 单体架构 Web应用…

springboot+vue.js汽车销售网站il05r

本靓车汽车销售网站管理员功能有个人中心,用户管理,车辆展示管理,车辆品牌管理,车辆型号管理,维修材料管理,材料分类管理,用户交流,留言板管理,系统管理,订单…

国产openeuler22.03容器环境下固定容器IP的实例

Docker 中默认的容器网络为名为bridge的桥接网络,使用DHCP协议,不能固定容器IP,每次重启,容器的IP是按其启动顺序来分配的,单宿主机多容器时,容器的IP就会发生变化,不利于程序 连接及安全加固配…

Ada Tutorial(1):Ada基础——wordcount程序

文章目录 Ada 常用的库和方法Ada.Characters.Handling字符类型函数转换函数 Ada 基础语法概览数据类型和子类型类型(Type)子类型(Subtype)类型和子类型的区别常用类型转换方法显示类型转换类型相关函数 循环语句无条件循环 (Loop)…

探索智慧档案的发展路径,开源网安受邀参加国际档案日专题讲座

近日,深圳市档案学会举办了“奋进新征程,兰台谱新篇”2023年国际档案日专题讲座。开源网安常务副总经理王颉博士受邀参加此次讲座,分享了《档案信息安全实务:时代与展望》,从软件供应链安全的维度为到场人员讲解了数字…

Vue3 ElementPlus Dialog封装 (一:使用props emit)

引言 多个页面中需要录入用户数据(弹窗内容相同),重复写弹窗代码比较繁琐。因此封装一下组件,使用效果如下: 本例中模型较简单,记录下使用方法和原理 实现原理 参考VUE官方两个例子,基本父子件…

调试CAN过滤器功能使用笔记

一.关于CAN过滤器的配置及使用 提示:此处使用的是雅特力的芯片(基本兼容stm32的芯片) 这里只讲32位宽的过滤器,16位的用法基本相同,注意因为位数减少数据不一样。 1.1首先过滤器有两种工作模式: 1.标识符…

Rust每日一练(Leetday0025) 矩阵置零、搜索二维矩阵、颜色分类

目录 73. 矩阵置零 Set Matrix Zeroes 🌟🌟 74. 搜索二维矩阵 Search A 2d-Matrix 🌟🌟 75. 颜色分类 Sort Colors 🌟🌟 🌟 每日一练刷题专栏 🌟 Rust每日一练 专栏 Golang…

逻辑回归与决策树回归

逻辑回归 逻辑回归函数: 逻辑回归分析属于概率型回归分析方法。 假设在自变量xi1、xi2…xip的作用下,因变量y取值为1和0的二值变量,其取值为1的概率为pi,则可以表示为: 相反,y取值为0的概率即: 对y取值为…

FlinkSql 使用总结

一、FlinkSQL底层实现理解 FlinkSQL在flink Framework的位置 Flink Table & SQL API是在DataStream和DataSet之上封装的一层高级API。由于DataStream和DataSet有各自的API,开发起来又有些困难,如果只是应对一些相对通用的需求会有点麻烦。而Flink T…