適当のごった煮

Pythonと境界標とQGISを中心にいろいろと

turtleで視力回復トレーニングを作る その1

スポンサードリンク

眼の筋肉を鍛える

視力が悪くてメガネをかけているので、視力回復などをテーマにした本を見かけると、つい手に取ってしまいます。

『一個人』という雑誌の2016年9月号で『「目の老化」を防ぐ生活術』という特集が組まれていて、16ページの眼トレ2週間ブックという小冊子が付録でついていたのため、思わず購入してしまいました。

そのうちいくつかのトレーニングは、顔を動かさずに目で線を追うことで眼の筋肉を鍛え、視力回復や老眼対策になるということで紹介されていました。

それらのトレーニングをやっているうちに、Pythonのturtleグラフィックスでトレーニングの図を描けるのではないかと感じて、ちょうどturtleグラフィックスの練習にもなると考え、線を視線で追う系のトレーニングを再現してみました。

以下のスクリプトは、Pythonのturtleを使う練習課題として作ったモノなので、視力回復等の効果を保証するものではないことをご了解ください。

目次

準備

まずはimportしてオブジェクトを作成し、このオブジェクトに対して操作を行っていきます。ペンの形は亀にします。画面サイズは幅960、高さ810を想定しています。また、sleepを使うために「import time」しています。

import turtle
import time

t = turtle.Turtle()
t.shape('turtle')

# 表示画面の幅と高さ t.screen.setup(width, height)で変更可能
print(t.screen.window_width()) # 960を想定
print(t.screen.window_height()) # 810を想定

8点スライド

腕を伸ばして指を8方向に移動させ、顔を動かさずに目で指先を追うストレッチです。画面の端まで行ったら1秒凝視するトレーニングです。

# 8方向移動用座標セット。端に寄りすぎないように15ピクセル内側にずらす
x = t.screen.window_width() / 2 - 15
y = t.screen.window_height() / 2 - 15
list_x = [0, 0, -x, x, -x, x, x, -x]
list_y = [y, -y, 0, 0, y, -y, y, -y]

for i in range(8):
    t.goto(list_x[i], list_y[i])
    t.dot(10)
    t.ht()
    time.sleep(1.5)
    t.st()
    t.home()

実行すると以下のような図になります。

f:id:tekito-gottani:20160929200313j:plain

 

ギザギザ・トレース

ギザギザの線を眼だけで追うトレーニングです。最後にたどり着くと黒丸を描いて、元の位置に戻ります。

# 画面右上に移動
x0, y0 = 400, 300
t.pu()
t.goto(x0, y0)
t.pd()

length = 600
width = 60
back_list = []
for i in range(1, 15):
    t.seth(270)
    back_list.append(t.pos())
    t.fd(length)
    back_list.append(t.pos())
    t.goto(x0-i*width, y0)

t.dot(10)
t.ht()
time.sleep(1.5)
t.st()

while back_list:
    t.goto(back_list.pop())

実行すると以下のような図になります。

f:id:tekito-gottani:20160929200411j:plain

コントラスト

対照色でできた図形を5秒ずつ見つめると視細胞を刺激してトレーニングになるそうです。並べて描くのは手間がかかるので順々に上書きしていきます。

color_list = [('purple', 'yellow'), ('pink', 'black'), ('orange', 'green'),\
              ('red', 'blue'), ('navy', 'deeppink'), ('darkgreen', 'tomato')]

length = 200
for i in color_list:
    length_tmp = length
    t.pu()
    t.goto(-length/2, -length/2)
    t.pd()
    for j in range(2):
        t.pd()
        t.color('black', i[j])
        t.begin_fill()
        for k in range(6):
            t.fd(length_tmp)
            t.lt(60)
        t.end_fill()
        t.pu()
        t.lt(60)
        length_tmp /= 2
        t.fd(length_tmp)
        t.rt(60)
    t.ht()
    time.sleep(5.5)
    t.st()

実行すると以下のようなコントラストのある六角形を順々に描いていきます。

f:id:tekito-gottani:20160929200506j:plain

参考