投稿

ラベル(Python)が付いた投稿を表示しています

Python turtle graphics 作例 : とある作図アルゴリズムにおいて変数変化による図の形状一覧

イメージ
動画 ソースコード import turtle, math, time window_x = 16 * 80 window_y = 9 * 80 turtle.setup(window_x, window_y, 0, 300) turtle.bgcolor("#000000") llx = 0 lly = 900 urx = 1600 ury = 0 turtle.setworldcoordinates(llx, lly, urx, ury) def star(x, y, angle, length):    turtle.pencolor("#FFFFFF")    turtle.penup()    turtle.goto(x, y)    turtle.pendown()    for i in range(0, 30):      turtle.fd(length)      turtle.right(angle)    turtle.setheading(0) # turtle.tracer(100,0) turtle.speed(5) x_dif = abs(llx - urx)/11 y_dif = abs(lly - ury)/10 h = 1 for m in range(9):    for n in range(10):      L = 70      star((x_dif * n) + (x_dif / 2), (y_dif * m) + (y_dif / 2), 180+h, L)      h = h + 1 turtle.mainloop() まとめページ Python turtle graphics まとめ スポンサーリンク Amazon商品リンク : Pythonプログラミング関連

Python turtle graphics : 指定座標への移動(goto, setposition, setx, sety)

イメージ
turtleの指定座標への移動 turtle graphicsではforwardやright、leftなどによる前進や回転でturtleを移動させる他に、座標を指定して直接その位置へturtleを移動させることも出来ます。 x、y座標を指定して移動する 以下のメソッドは引数としてx、y座標を指定すると、その位置へturtleが移動します。 turtle.goto() turtle.setposition() 省略形 : turtle.setpos() 例えば、x座標が250、y座標が80の位置に移動させる場合は turtle.goto(250, 80) とします。 座標を配列として指定 またこれらのメソッドはx、yの引数2つの他、例えば[30, 60]のような配列を引数とすることも可能です。 その場合は以下のようになります。 p = [100, 200] turtle.goto(p) x、yのどちらか一方の座標のみ指定して移動する 以下のメソッドではxもしくはy、一つの引数だけ指定して移動することが出来ます。 turtle.setx() turtle.sety() どちらか一方の座標は固定して移動したい場合には便利に使えるでしょう。 移動時に線を描くかどうか さて、以上のような座標を指定して移動するとき、線を描くかどうかを場合によって選択する必要が出てくるでしょう。 単にそのままメソッドを実行した場合は線が描かれます。しかしそうではなく、移動時には線を描かせないようにしたい場合もあるでしょう。そういった場合は以下のメソッドを組み合わせて用います。 線を描くペンを無効にする。 turtle.penup() 省略形 : turtle.pu() 省略形 : turtle.up() 無効にしたペンを再度有効にする。 turtle.pendown() 省略形 : turtle.pd() 省略形 : turtle.down() 実際にこれらのメソッドを用いる場合、まず移動前にペンを無効にしておいて、移動後に再びペンを有効にします。 実行例は以下のようになります。 turtle.penup() turtle.goto(30, 210) turtle.pendown() ...

Python turtle graphics : turtleの進行していく角度の設定(right, left, setheading)

イメージ
Turtleの進む角度の設定について Turtleの進む方向(方角)を指定するためのメソッドがいくつかあります。指定した角度だけ回転させるメソッドと、指定した任意の角度へ回転させるメソッドなど。 回転させるメソッドはそれだけでは単にturtleが回転するだけなので、任意の方向へ進ませる場合は前進などのメソッドと合わせて用いることになります。 ここではturtleを回転させる基本的なメソッドを紹介していきます。 右方向へ回転させる turtle.right() のメソッドによりturtleを右方向へ回転させることが出来ます。引数として回転させたい角度を与えます。 省略した書き方として turtle.rt() という書き方も出来ます。 なお回転させた後はその角度を向いたままになるため、再度このメソッドを実行するとさらにその角度だけ回転することになります。 例えば turtle.right(30) turtle.right(25) と実行すると、turtleは30+25で55度右向きに回転することになります。 左方向に回転させる turtle.right()とは逆に左方向に回転させるメソッドに turtle.left() があります。こちらも引数として回転させたい角度を与えて用います。 省略形は turtle.lt() となります。 なお、turtle.right()に負の角度の値を与えることでも左方向に回転させることが出来ます。 逆にturtle.left()も負の角度の値を与えれば右方向に回転させることが出来ます。 任意の角度へ回転させる turtle.right()、turtle.left()では引数に与えた角度だけ回転しますが、任意の角度へ直接回転させることは出来ません。 引数に任意の角度を与え、turtleをその角度に向かせるには turtle.setheading() を用います。 例えば、120度の角度に向かせるには turlte.setheading(120) とします。 また、turtle.setheading()の省略形は turtle.seth() です。 向いている角度を確認 turtleが向いている角度を確認するには tur...

Python turtle graphics : スクリーンに文字を書く方法(turtle.write)

イメージ
turtle graphicsでスクリーンに文字を書く 文字入力の例 turtle graphicsで図形を描いているとき、図形だけでなく何かしら文字もスクリーンに入力したい場合もあるでしょう。動作の説明や進んだ距離や曲がる角度などを文字として入力しておくと、より分かりやすい表現が出来るようになります。 turtle graphicsではスクリーンに文字を入力するための turtle.write() というメソッドがあります。 turtle.write() turtle.write()メソッドでスクリーンに文字を入力するとき、簡単には以下のようにします。 turtle.write("Hello world") この場合の出力は以下の図のようになります。turtleのやや右上に指定した"Hello world"というテキストが入力出来ていることが分かりますね。 turtle.write("Hello world") このままでは文字が小さく読み難いですが、turtle.write()を用いる際に引数を指定することで文字サイズなどを調整することも可能です。 turtle.write()の引数 turtle.write()で引数として指定出来るのは以下の4つ。 arg : オブジェクト move : 文字入力の際にturtleも移動させるかどうかの指定(True, False) align : turtleの位置に対し入力する文字の位置の指定(left, center, right) font : フォントの種類、サイズ、フォントタイプの指定 引数を指定する際、例えば全て指定しようとすると以下のようになります。 turtle.write(arg="test text", move=False, align="left" font=("Sans", 24, "bold")) または turtle.write("test text", False, "left", ("Sans", 24, ...

Python turtle graphics 作例 : 五角形を集めて花のような模様を描いてみる(関数作成)

イメージ
動画 完成図(静止画) ソースコード import turtle, random def penta(length):     for i in range(0, 5):         turtle.forward(length)         turtle.left(180-108) def color_red_up(num, step, ini_red, ini_green, ini_blue):     red = ini_red + num / step     green = ini_green     blue = ini_blue     if red > 1.0:         red = 1     if green > 1.0:         green = 0     if blue > 1.0:         blue = 0     return [red, green, blue] def rotate_penta(length, size, step, color):     for i in range(0, 12):         turtle.fillcolor(color_red_up(i, step, color[0], color[1], color[2]))         t...

Python turtle graphics 作例 : 再帰処理を用いた円の描画

イメージ
動画 完成図(静止画) ソースコード import turtle turtle.setup(960,720,0,500) def circ(x):     if x > 200:         return     turtle.circle(x,steps=100)     turtle.left(5)     print(x)     circ(x + 1)     turtle.tracer(5,0) turtle.shape("turtle") turtle.shapesize(1, 1, 1.5) turtle.pencolor(0,0.6,0) turtle.fillcolor(0,1,0) turtle.begin_fill() circ(1) turtle.end_fill() turtle.mainloop() まとめページ Python turtle graphics まとめ スポンサーリンク Amazon商品リンク : Pythonプログラミング関連

Python turtle graphics 作例 : たくさんの木を描いてみる

イメージ
動画 完成図(静止画) ソースコード import turtle, random def tree(length, angle):     if length < 2:         return     turtle.pencolor("brown")     turtle.pensize(5)     turtle.setheading(90)     turtle.forward(length)     turtle.pencolor("green")     turtle.setheading(angle)     turtle.forward(length)     turtle.penup()     turtle.forward(-length)     turtle.pendown()     turtle.pencolor("brown")     turtle.setheading(90)     turtle.forward(length * 0.5)     turtle.pencolor("green")     turtle.setheading(180-angle)     turtle.forward(length)     turtle.penup()     turtle.forward(-length)     turtle.pendown()     tree(l...

Python turtle graphics 作例 : 複数のチェック柄の円

イメージ
動画 完成図(静止画) ソースコード import turtle turtle.setup(960,720,None,None) t1 = turtle.Turtle() t2 = turtle.Turtle() t3 = turtle.Turtle() t4 = turtle.Turtle() t5 = turtle.Turtle() t6 = turtle.Turtle() myturtles = [t1, t2, t3, t4, t5, t6] mycolor = ["red", "orange", "cyan", "green", "blue", "gray"] myr = [36, 30, 24, 18, 12, 6] myradius = [50,50,50,50,50,50] mygoto = [(-300,150), (0,150), (300,150), (-300,-150), (0,-150), (300,-150)] turtle.tracer(10,3) for cnt, num in enumerate(myturtles):     num.speed(10)     num.goto(mygoto[cnt])     num.clear() r_n = min(myr) for i in range(0, 360//r_n):     for cnt, num in enumerate(myturtles):         if 360 > myr[cnt] * i:             num.left(myr[cnt])             num.circle(myradius[cnt], steps=100)  ...

Python turtle graphics : 角度の単位設定(turtle.degrees)

イメージ
Turtle graphicsでの角度の単位 turtle graphicsにおいて角度の単位はデフォルトでは度となっています。設定によりこれをラジアンに変更することも出来ます。 またデフォルトでは一周は360度ですが、任意の数値を一周の値に設定することも出来ます。 turtle.degrees() turtle.degrees()メソッドの括弧内に数値を入れて実行するとその数値が一周の角度となります。例えば turtle.degrees(100) とすると一周が100で表されるようになります。 また、以下のように実行すると初期設定(360度)に戻ります。 turtle.degrees() turtle.radians() turtle.radians() と実行すると角度はラジアンとして扱われるようになります。 (余談 : turtleの向いている方向の確認) ちなみにturtleが向いている角度を確認するには turtle.heading() と実行します。そうするとそのとき向いている角度が返ってきます。 図説 : turtle.degrees()で一周の値を変更した場合について 以下に半径100の円を描く場合について、turtle.degrees()をデフォルト及び100に設定した場合との比較を図示します。 なお、半径100の円を描くには以下のようにturtle.circle()でextentに数値を指定します。 turtle.circle(radius=150, extent=100, steps=None) 見て分かるようにデフォルト(上の円)では途中までしか円が描かれていませんが、一周を100に設定した方(下の円)では一周分描かれています。 図のソースコード import turtle turtle.setup(960,720,None,None) turtle.degrees() turtle.penup() turtle.goto(0, 100) turtle.pendown() turtle.circle(radius=150, extent=100, steps=None) turtle.penup() turtle.goto(0, 70) turt...

Python turtle graphics 作例 : チェック柄の円

イメージ
動画 完成図 ソースコード import turtle turtle.setup(960,720,None,None) turtle.bgcolor("gray80") turtle.shape("turtle") turtle.speed(10) turtle.tracer(1,2) turtle.pencolor("black") turtle.fillcolor("green") r = 10 turtle.begin_fill() for i in range(0, 360//r):     turtle.left(r)     turtle.circle(150, steps=360) turtle.end_fill() turtle.mainloop() まとめページ Python turtle graphics まとめ スポンサーリンク Amazon商品リンク : Pythonプログラミング関連

Python turtle graphics : turtleの前後の移動(forward)

イメージ
turtle graphicsの基本動作 : forward turtle graphicsでturtleを前進させるには turtle.forward() を用います。turtle graphicsにはその他にもいろいろと移動操作はありますが、これが基本となる移動操作です。 省略した書き方 コードを書く時、turtle.forward()は省略して turtle.fd() と書くことも出来ます。 turtle.back() また後進用には turtle.back() もあります。なおturtle.forward()でも負の値を与えることで後進出来るので、今回はturtle.forward()のみ解説します。 turtle.forward()について turtle.forward()は引数に移動する距離を与えて実行すると、その距離だけ前進します。また負の値を与えれば後進します。 前進 turtle.forward() 前進 ソースコード import turtle turtle.setup(960,720,None,None) turtle.shape("turtle") turtle.write("turtle.forward(400)", font=("",18,"bold")) turtle.forward(400) turtle.mainloop() 後進 turtle.forward()後進 ソースコード import turtle turtle.setup(960,720,None,None) turtle.shape("turtle") turtle.write("turtle.forward(-400)", font=("",18,"bold")) turtle.forward(-400) turtle.mainloop() 角度を変えて前進 これだけだとただ前後に動くだけですが、turtle.right()やturtle.left()などで進行角度を変更すれば...

Python turtle graphics : turtleの描画速度設定について

イメージ
turtleの描画速度設定 turtle.speed() turtle graphicsのturtleの進むスピード(描画速度)は turtle.speed() のメソッドにより設定します。引数としては1〜10まで、そして0を指定します。 1が最もturtleの速度が遅く、数が増えるに従い速度が増していきます。 で、10が最も早いと思われるますが、最も早いのは0を設定したときになります。 設定値ごとの速さを比べると以下のようになっています。   0 > 10 > 9 > 8 > 7 > 6 > 5 > 4 > 3 > 2 > 1 以下、動画で説明します。 動画の結果は以下のスクリーンショットの通り。 そして数値ではなく文字列として以下の文言でも指定出来ます。 “slowest" “slow” “normal” “fast” “fastest” ここでは"fastest"が0、"fast"が10、slowestが"1"に対応しています。 ("slow"が3、"normal"が6) 設定は turtle.speed(10) turtle.speed("slow") のように行います。 turtle.delay(), turtle.tracer() さらにturtleの速度を速くしたい場合は turtle.delay() turtle.tracer() を用います。 turtle.delay()は引数に描画遅延をどれくらい取るかをミリ秒で指定します。これを0と設定すると簡単な図形ならほぼ一瞬で描画が完了します。 そしてturlte.tracer()ではスクリーンを更新する間隔と描画遅延の2つの引数を指定します。1ステップ毎ではなくたとえば100ステップをまとめて描画することが出来るので、より高速に描画が行えるようになります。 設定はそれぞれ以下のように行います。 turtle.delay(0) turtle.tracer(100, 0) まとめページ Python turtle gra...

Python turtle graphics - 作例 : 直線と回転のみによる図形

イメージ
直線と回転のみによる図形 Python turtle graphicsで直進(forward)と回転(left)のみで図形を書いてみました。 操作自体はある距離を進んだところで左に曲がり、次は少しだけ距離を増やして再び進んで同じ動作を繰り返すというもの。例としては以下のような感じ。 import turtle turtle.fd(50) turtle.left(80) turtle.fd(55) turtle.left(80) turtle.fd(60) turtle.left(80) turtle.fd(65) turtle.left(80) turtle.fd(70) turtle.left(80) turtle.fd(75) turtle.left(80) turtle.fd(80) turtle.left(80) turtle.fd(85) turtle.left(80) turtle.fd(90) 単純ですね。ただ操作自体は単純ですが、これを何回も繰り返して出来上がった図形はバラエティーに富んでいるのが出来ておもしろいです。例えば、曲がる角度を118.2度ではこのような図形になったりします(直線の長さをどう取るかにも依存しますが)。 ソースコード(操作部分のみ) コードの図形描画操作部分のみ抜き出すと以下の通り。 a = 0 while True:     angle = 16     turtle.left(angle)     turtle.fd(a)     a = a + 2     if a > 550:         break (実際のソースコードは多重ループや描画を速くするような処理も入れているのでもっと長いです) 上のコードでは曲がる角度としてangleという変数を用いています。1つ図形を書き終わったら、この変数を増やして新しい図形を書く、ということを繰り返します。直線の長さは変数aで指定していて曲がる際の増加分は+2としました。こ...

Python turtle graphics : モードのstandardとlogoの違いについて - turtle.mode()

イメージ
turtle graphicsで用いられるモードとは turtle graphicsではいくつかモードを選ぶことが出来ます。ここで言うモードとは初期進行方向と角度がどちら回りなのかなどの違いで区別されています。通常であれば特に必要が無ければモードを変更することはないでしょう。 さてPythonのturtle graphics用意されているモードで主に用いられるのは standard logo の2つ。そしてもう一つ world というのもあり、こちらはユーザーが独自のworld coordinatesを定義した場合にこのモードになります。今回はworldについては解説は省き、starndardとlogoの2つについて解説していきます。   モードの確認、設定方法 使用してるモードを確認するには以下のコマンドを実行します。 turtle.mode() モードを設定するときは例えばlogoモードにするには以下のようにします。 turtle.mode("logo") standardモード turtle graphicsの初期状態ではおそらくこのstarndardモードになっていると思います。このモードでは以下の設定となります。 初期進行方向 : 右向き 角度 : 反時計回り これを次の図を用いて説明します。この図では一定方向進んだところで角度を記述して初期位置に戻り、次に角度を30度増やして再び同じ動作をするということを繰り返しています。初期進行方向が右向きなので、初期位置から真っ直ぐ右に行ったところが0度となっています。そして角度は反時計回りに増えていきます。 (見た時に分かりやすくなるように、角度が増える毎にフォントと矢印のサイズを大きくしていってます) standardモードの図示 logoモード 同様にlogoモードについて説明すると以下のようになります。 初期進行方向 :上向き 角度 : 時計回り さきほどと同様に図で示すと以下の通り。logoモードでは初期進行方向は真上で、角度は時計回りに増えるようになっています。 logoモードの図示 図示に用いたソースコード 図示に用いたソースコードは以下の通り。 import turtle turtle.mode("...

スポンサーリンク