python与分形0016 - 【教程】字符矩阵

2021-12-10 09:15:38 浏览数 (1)

今天写一个简单点的教程,画一个字符矩阵,成品图如下:

想要打印这样一个字符矩阵,需要具备如下一些基本知识:

  1. turtle如何画字符?
  2. turtle的画布上如何排版?

如何画字符?

turtle提供了一个函数,write,可以画文本,具体参数可以参考手册:

turtle.write(arg, move=False, align="left", font=("Arial", 8, "normal")) Write text - the string representation of arg - at the current turtle position according to align (“left”, “center” or “right”) and with the given font. If move is true, the pen is moved to the bottom-right corner of the text. By default, move is False.

字符的Unicode码可以在这个网站上查到:

https://unicode-table.com/

比如,“安”字的unicode码是5B89。

在python中,可以通过ord函数得到一个字符串的unicode码:

代码语言:javascript复制
>>> x=u'安'
>>> x
'安'
>>> hex(ord(x))
'0x5b89'

通过write函数写一个“安”字,楷体,300p:

代码语言:javascript复制
turtle.write(u'安', align="center", font=("simkai", 300, "normal"))

画布上如何排版?

又得用点数学知识了。

假设我们画COUNT*COUNT的矩阵,每个字符间距为DIST,为了保证矩阵居中绘制,起始位置必须在左上角位置:

代码语言:javascript复制
STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2

当遍历整个COUNT*COUNT时,我们可以通过求商和取余得到行列值,确定每个字符的位置。

这样就可以很简单的推导出源码了:

代码语言:javascript复制
# coding: utf-8

import turtle
import math
import time

turtle.setup(width=1.0, height=1.0, startx=None, starty=None)
#turtle.tracer(0)
turtle.ht()

turtle.up()
COUNT=19
DIST=30
FONTSIZE=16
STARTX=-DIST*COUNT//2
STARTY=DIST*COUNT//2

time.sleep(6)

turtle.goto(STARTX, STARTY)
for c in range(COUNT*COUNT):
    x = c%COUNT
    y = c//COUNT
    turtle.goto(STARTX DIST*x, STARTY-DIST*y)
    turtle.write(chr(0x2600 c), align="center", font=("Arial", FONTSIZE, "normal"))

0 人点赞