学计算机的男生发这个给我看是什么意思?www.zhihu.com

python 作图 心形线 用python画心形线_python

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

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

怎么填满心形曲线

怎么用 python 画

怎么画心形曲线

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

我们选用中上那个.

python 作图 心形线 用python画心形线_ci_02

怎么填满心形曲线

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]

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

python 作图 心形线 用python画心形线_用python绘制心形_03

就行.

最后就是 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)]))]