PYTHON爱心代码
效果图:
源码:
from tkinter import *
from math import log, sin, cos, pi
import random
# 新建画布尺寸大小
CANVAS_WIDTH = 640
CANVAS_HEIGHT = 480
CANVAS_CENTER_X = CANVAS_WIDTH / 2
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2
IMAGE_ENLARGE = 8
# 定义心形函数
def heart_function(t):
x = 16 * sin(t) ** 3
y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))
y *= IMAGE_ENLARGE
x *= IMAGE_ENLARGE
x += CANVAS_CENTER_X
y += CANVAS_CENTER_Y
return int(x), int(y)
def scatter_inside(x, y, beta=0.15):
ratiox = - beta * log(random.random())
ratioy = - beta * log(random.random())
dx = ratiox * (x - CANVAS_CENTER_X)
dy = ratioy * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
# 定义扰动函数
def shrink(x, y, ratio):
force = 1 / ((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.5
dx = ratio * force * (x - CANVAS_CENTER_X)
dy = ratio * force * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
# 定义画心函数
class Heart:
# 定义self
def __init__(self):
self._points = set()
self._extra_points = set()
self._inside = set()
self.all_points = {}
self.calc_position = shrink
self.build(2000)
# 创建心形点
def build(self, number):
for _ in range(number):
t = random.uniform(0, 2 * pi)
x, y = heart_function(t)
self._points.add((int(x), int(y)))
for xx, yy in list(self._points):
for _ in range(3):
x, y = scatter_inside(xx, yy, 0.05)
self._extra_points.add((x, y))
# inside点
point_list = list(self._points)
for _ in range(4000):
x, y = random.choice(point_list)
x, y = scatter_inside(x, y)
self._inside.add((int(x), int(y)))
# 计算心形点
def calc_position(self, x, y, ratio):
force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.5)
dx = ratio * force * (x - CANVAS_CENTER_X) + random.randint(-1, 1)
dy = ratio * force * (y - CANVAS_CENTER_Y) + random.randint(-1, 1)
return x - dx, y - dy
def calc(self, frame):
calc_position = self.calc_position
ratio = 10 * sin(frame / 10 * pi)
all_points = []
# outline 心形点
for x, y in self._points:
x, y = calc_position(x, y, ratio)
size = random.randint(1, 3)
all_points.append((x, y, size))
# inner内圈点
for x, y in self._extra_points:
x, y = calc_position(x, y, ratio)
size = random.randint(1, 2)
all_points.append((x, y, size))
for x, y in self._inside:
x, y = calc_position(x, y, ratio)
size = random.randint(1, 2)
all_points.append((x, y, size))
self.all_points[frame] = all_points
# 画出心形点
def render(self, canvas, frame):
for x, y, size in self.all_points[frame % 20]:
canvas.create_rectangle(
x, y, x + size, y + size, width=0, fill="#ff7171")
# 定义动画函数
def draw(root: Tk, canvas: Canvas, heart: Heart, frame=0):
canvas.delete('all')
# heart.render(canvas)
heart.render(canvas, frame)
root.after(30, draw, root, canvas, heart, frame + 1)
# 主程序调用所有函数
if __name__ == '__main__':
root = Tk()
canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
# 创建字体
canvas.pack()
heart = Heart()
for frame in range(20):
heart.calc(frame)
draw(root, canvas, heart)
root.mainloop()
PYTHON爱心代码相关推荐
- python爱心代码简单教程
python爱心代码简单教程操作方法 1 将以上代码保存为.py文件,假设保存的文件名为 love.py (不会保存?先保存为txt文本,然后将后缀改为.py) 2 在终端(cmd命令窗口)输入pyt ...
- python爱心代码合集
python爱心代码合集 一行代码画爱心 输出 I 爱 U 填充型 动态画红心 桃心 线性 立体红心 画一朵玫瑰花 画树 附录 一行代码画爱心 print('\n'.join([''.join([(' ...
- 解析python爱心代码(码农高天版)
背景概述 自从看了码农高天的python爱心代码就非常震撼,特别想了解其背后的实现原理,感觉是自己的知识不够,于是这股冲动带我刷了计算图形学,高数,线性,数值分析以及信号处理,最后发现然而并没什么用, ...
- Python爱心代码(双版本)
Python爱心代码双版本: 版本1:原版动态爱心: 版本2:中间加名字版 原版代码: #python李峋爱心代码 #br七鹤 import random from math import cos, ...
- python 爱心代码
python程序代码:heart.py from math import cos, pi import numpy as np import cv2 import os, globclass Hear ...
- 【爱心上面可以加字】Python爱心代码,简单又好看
目录 前言 一.爱心代码展示 二.完整代码 前言 最近都快要被动态爱心刷屏了,今天跟大家带来不一样的爱心代码,可以在爱心中央写下你想要的字! 可以用Python来实现它,会Python的朋友们赶快收藏 ...
- python爱心代码_母亲节快到了,用Python给老妈写个祝福小程序吧~
导 语 看到好多人留言问我咋好久没更新文章了,于是看了下上篇文章的发布日期,好吧确实挺久的,是该上线更一波文章了.想到母亲节快到了,不如就用Python给老妈写个祝福小程序吧~让我们愉快地开始吧~ 相 ...
- python爱心代码_「含蓄优雅表白神器」程序员式用python代码画爱心(附详细教程)...
还能用python代码画爱心?还有这种操作?这是什么原理? 不相信python代码可以画爱心?先来一张效果图来看看效果吧! 用python代码画爱心的思路是怎样的? 1.怎么画心形曲线 2.怎么填满心 ...
- python爱心代码制作_Python之——爱心代码参与情人节
一行代码实现输出爱心图,参考https://zhuanlan.zhihu.com/p/23321351 原理: 1.借助数学函数--((x * 0.05) ** 2 + (y * 0.1) ** 2 ...
- python爱心代码动态_一篇文章教你用python画动态爱心表白
hRf免费资源网 初级画心hRf免费资源网 学Python,感觉你们的都好复杂,那我来个简单的,我是直接把心形看作是一个正方形+两个半圆:hRf免费资源网 hRf免费资源网 于是这就很简单了,十行代码 ...
最新文章
- JDK中的坑:JDK中这些方法的bug你不要踩
- 如何在到处是“雷”的系统中「明哲保身」?这是第一招
- Python文件修改的两种方式
- 1079. 延迟的回文数 (20)
- 从零开始学Pytorch(十三)之梯度下降
- mysql可以装到其他端口吗_linux下怎么在另一个端口安装高版本mysql
- 让Oracle跑得更快 ——博文视点大讲堂34期活动圆满结束
- 此时本机的BootLoader程序坏了,也就是说grub第一阶段坏掉了,该如何修复
- 利润百倍的暴利行业?
- flash游戏转换html5,一键转换——介绍我做的flash转html5工具LavaH
- 推荐一个小工具 -- 微信QQ防撤回
- 【业务人员第一视角】氚云低代码开发平台测评
- HTML 编辑器-网页制作是用什么来做的?-2
- javascript 简繁转换
- Python dic 方法汇总
- 基于K210的MNIST手写数字识别
- Minecraft空岛服开服
- 怎样让你的软文更有说服力?四个办法帮你赢得用户信任
- 计算机管理器磁盘清理,Win10提示windows磁盘空间清理管理器已停止工作
- 什么是LTV,舔狗的LTV可以乘以N吗?