用python绘制心形_用 python 画爱心代码讲解

学计算机的男生发这个给我看是什么意思?​www.zhihu.comv2-58e8e87f19800b60c25d6b900128ef81_180x120.jpg

原理其实挺简单的. 代码网上也有. 最难的部分前人都告诉我们了, 心形可画. 要自己推导通过泰勒各种扭也可以. 通过肉眼扭我感觉也不是不可..

我们理一下思路.怎么画心形曲线

怎么填满心形曲线

怎么用 python 画

怎么画心形曲线

这个 google 一下就行了. heart curve equation

我们选用中上那个.

equation?tex=%28x%5E2%2By%5E2-1%29%5E3-x%5E3y%5E3%3D0

怎么填满心形曲线

naive 的想法, 函数=0 是一根线, 那线的两侧就是大于 0 跟小于 0.

取x, y = 0 , 发现 函数 <=0 是成立的. 先试试

怎么用 python 画

我们先测试一下公式, 把公式放到 python 里去. 借助 sympy 这个库,确认这个公式长的可靠.

from sympy import var, plot_implicit

var('x y ')

plot_implicit((x**2+(-y)**2-1)**3+x**2*(-y)**3)

我们把一行画心的代码解析一下长这样

l2=[]

# 将纵向每个字符当作 y 坐标的刻度

for y in range(15,-15,-1):

l3 = []

# 将横向每个字符当作 x 坐标的刻度

for x in range(-30,30):

# 如果 x,y 点在心形内,则将一个字符加入到行,否则加入空字符

l3.append((' I love U'[(x-y)%9]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' '))

l2.append(''.join(l3))

l1 ='\n'.join(l2)

for i in l1:

print("\033[91m"+i,end="",flush=True)

下面这段代码是不是跟我们找的公式很像, 只不过做了 x y 轴的缩放,

((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0

下面这段的意思是, 从 ' I love U' 里挑字符出来拼行. 为毛 x-y ? 只为了斜一点, 但要求是保证它的增速为 1 . 你用 x 也行 但画出来就是耿直的 I love U了.

' I love U'[(x-y)%9]

我们只需要将字符当作坐标刻度.去填满

equation?tex=%28x%5E2%2By%5E2-1%29%5E3-x%5E2y%5E3%3C%3D0 就行.

最后就是 print 控制颜色

\033[91m

基本就这样. 有兴趣的同学可以将画心的函数都试一下.理论上都可以画出来. 只不过有一些是极坐标,要做一些转换才行.

PS: 有些朋友想要用中文. 那就要确认几件事你 python 里中文"我爱你"的编码字节宽度.

你在 terminal 里的中文"我爱你"的编码字节宽度.

import time

[(time.sleep(0.0009), print("\033[91m"+i,end="",flush=True)) for i in ('\n'.join([''.join([(u'我爱你'[(x-y)%3]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30,2)])for y in range(15,-15,-1)]))]

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值