prefacio
Hola a todos.
Recientemente, hay un drama muy popular llamado "Ignite Me, Warm You". Escuché
que es muy popular recientemente. Como programador, el editor del luchador en Python, ¿puedes dárselo a todos? Arreglar ¡una ola!
¿Cómo debería decirlo? Está bien usar esta confesión, ¿y si ella también ve este drama? ¿Y si todo está bien? Jaja
Vamos chicos
Documentos relacionados
Si encuentra problemas que no entiende, también puede enviar un mensaje privado al editor o ↓ ↓ ↓
Código fuente Haga clic aquí para recibirlo (Nota: Su)
Hay un montón de recursos que se pueden prostituir por nada, ¡y actualizaré los pocos conocimientos de Python de vez en cuando! !
Mostrar resultados
el código
importación de módulos
import random
from math import sin, cos, pi, log
from tkinter import *
Alto y ancho del lienzo
Algunos valores pueden ser ajustados por nosotros mismos. Aquí configuro la altura y el ancho a 480:640
CANVAS_WIDTH = 640 # 画布的宽
CANVAS_HEIGHT = 480 # 画布的高
coordenadas del eje x, y
CANVAS_CENTER_X = CANVAS_WIDTH / 2 # 画布中心的X轴坐标
CANVAS_CENTER_Y = CANVAS_HEIGHT / 2 # 画布中心的Y轴坐标
Acercarse
IMAGE_ENLARGE = 11 # 放大比例
color del corazón
Puedes cambiarlo tú mismo, puedes cambiarlo al color que quieras.
HEART_COLOR = "#ff8181" # 心的颜色,芜湖我喜欢的粉色
generador de funciones
python学习交流Q群:465688591### 源码领取
def heart_function(t, shrink_ratio: float = IMAGE_ENLARGE):
"""
“爱心函数生成器”
:param shrink_ratio: 放大比例
:param t: 参数
:return: 坐标
"""
# 基础函数
x = 16 * (sin(t) ** 3)
y = -(13 * cos(t) - 5 * cos(2 * t) - 2 * cos(3 * t) - cos(4 * t))
agrandar
# 放大
x *= shrink_ratio
y *= shrink_ratio
mover al centro del lienzo
Operación básica, necesito publicar más texto jaja, de lo contrario mi calidad no es buena
# 移到画布中央
x += CANVAS_CENTER_X
y += CANVAS_CENTER_Y
return int(x), int(y)
difusión interna aleatoria
def scatter_inside(x, y, beta=0.15):
"""
随机内部扩散
:param x: 原x
:param y: 原y
:param beta: 强度
:return: 新坐标
"""
ratio_x = - beta * log(random.random())
ratio_y = - beta * log(random.random())
dx = ratio_x * (x - CANVAS_CENTER_X)
dy = ratio_y * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
estar nervioso
Este paso es crítico, lo que estamos haciendo es el código de amor palpitante, por lo que este paso es el más importante.
def shrink(x, y, ratio):
"""
抖动
:param x: 原x
:param y: 原y
:param ratio: 比例
:return: 新坐标
"""
force = -1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.6) # 这个参数...
dx = ratio * force * (x - CANVAS_CENTER_X)
dy = ratio * force * (y - CANVAS_CENTER_Y)
return x - dx, y - dy
Ajustar la relación de zoom
Básicamente, puedes ajustarlo a tu gusto.
@staticmethod
def calc_position(x, y, ratio):
# 调整缩放比例
force = 1 / (((x - CANVAS_CENTER_X) ** 2 + (y - CANVAS_CENTER_Y) ** 2) ** 0.520) # 魔法参数
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
Escalado periódico suave
def calc(self, generate_frame):
ratio = 10 * curve(generate_frame / 10 * pi) # 圆滑的周期的缩放比例
halo_radius = int(4 + 6 * (1 + curve(generate_frame / 10 * pi)))
halo_number = int(3000 + 4000 * abs(curve(generate_frame / 10 * pi) ** 2))
all_points = []
aureola
# 光环
heart_halo_point = set() # 光环的点坐标集合
for _ in range(halo_number):
t = random.uniform(0, 2 * pi) # 随机不到的地方造成爱心有缺口
x, y = heart_function(t, shrink_ratio=11.6) # 魔法参数
x, y = shrink(x, y, halo_radius)
if (x, y) not in heart_halo_point:
# 处理新的点
heart_halo_point.add((x, y))
x += random.randint(-14, 14)
y += random.randint(-14, 14)
size = random.choice((1, 2, 2))
all_points.append((x, y, size))
contorno
# 轮廓
for x, y in self._points:
x, y = self.calc_position(x, y, ratio)
size = random.randint(1, 3)
all_points.append((x, y, size))
contenido
# 内容
for x, y in self._edge_diffusion_points:
x, y = self.calc_position(x, y, ratio)
size = random.randint(1, 2)
all_points.append((x, y, size))
for x, y in self._center_diffusion_points:
x, y = self.calc_position(x, y, ratio)
size = random.randint(1, 2)
all_points.append((x, y, size))
self.all_points[generate_frame] = all_points
último paso
Se hará pronto, la persistencia es la victoria.
def draw(main: Tk, render_canvas: Canvas, render_heart: Heart, render_frame=0):
render_canvas.delete('all')
render_heart.render(render_canvas, render_frame)
main.after(160, draw, main, render_canvas, render_heart, render_frame + 1)
if __name__ == '__main__':
root = Tk() # 一个Tk
canvas = Canvas(root, bg='black', height=CANVAS_HEIGHT, width=CANVAS_WIDTH)
canvas.pack()
heart = Heart() # 心
draw(root, canvas, heart) # 开始画画~
root.mainloop()
código completo
Click para recibir (Nota: Su)
por fin
De hecho, también podemos usar nuestro cerebro, ajustar el tamaño del lienzo y luego agregar algunos otros elementos.
Como nombres, qué fechas... montones y montones
Depende de cómo operes
Bueno, el compartir de hoy es por aquí.
Si tiene alguna pregunta sobre el artículo, o tiene otras preguntas sobre python, puede dejar un mensaje en el área de comentarios o enviarme un mensaje privado. Si cree que el
artículo que compartí es bueno, puede seguirme o darle un pulgar al artículo. arriba (/≧▽≦)/