コンピュータグラフィックスにおいて、タートルグラフィックスは、デカルト座標平面(x軸とy軸)上の相対カーソル(「タートル」)を使用するベクターグラフィックスです。タートルグラフィックスは、 Logoプログラミング言語の重要な機能です。[ 1 ]また、動くフレームを扱うためのシンプルで教育的な方法でもあります 。



カメには、位置、向き(または方向)、ペンという 3 つの属性があります。ペンにも、色、幅、オン/オフ状態(ダウンとアップとも呼ばれます)という属性があります。[ 2 ]
カメは、「10マス前進」や「90度左に曲がる」など、自身の位置を基準としたコマンドで動きます。カメが持っているペンも、有効にしたり、色や幅を設定したりすることで制御できます。生徒は、自分がカメだったらどうするかを想像することで、カメの動きを理解し(そして予測し、推論する)ことができます。 シーモア・パパートはこれを「身体感覚的」推論と呼びました。[ 3 ]
完全なタートルグラフィックスシステムには、制御フロー、プロシージャ、再帰が必要ですが、多くのタートル描画プログラムはこれらの要素を満たしていません。これらの構成要素から、正方形、三角形、円などのより複雑な形状やその他の複合図形を作成できます。例えば、タートルグラフィックスの概念は、フラクタルを生成するリンデンマイヤーシステムで役立ちます。
タートルジオメトリは、厳密に座標アドレス指定を行うグラフィックスシステムの代替手段として、グラフィックス環境で使用されることもある。
タートルグラフィックスは、Logo プログラミング言語と関連付けられることが多い。[ 4 ]シーモア・パパートは、 1960 年代後半に、自身のタートルロボットをサポートするために、Logo にタートルグラフィックスのサポートを追加した。タートルロボットは、ユーザーのワークステーションから制御されるシンプルなロボットで、ロボット本体に組み込まれた、または取り付けられた小型の格納式ペンを使用して、割り当てられた描画機能を実行するように設計されている。タートルジオメトリは、( x , y ) アドレス指定のデカルトジオメトリとは多少異なり、ビットマップやラスターグラフィックスなどの座標指定システムと比較して、主にベクトルベース (つまり、開始点からの相対的な方向と距離) である。実際問題として、より伝統的なモデルの代わりにタートルジオメトリを使用することで、タートルロボットの実際の動きのロジックを模倣することができる。タートルは、伝統的に、そして最も頻繁には、三角形またはタートルアイコンとして図式的に表現される (ただし、任意のアイコンで表現することもできる)。
現在、Pythonプログラミング言語の標準ライブラリには Turtle グラフィックス モジュールが含まれています。[ 2 ]以前の Logo と同様に、Python の turtle 実装では、プログラマーが 2 次元空間で 1 つまたは複数のタートルを制御できます。標準の Python 構文、制御フロー、データ構造は turtle モジュールと併用できるため、turtle は Python を学習するプログラマーが言語の基本に慣れるための人気のある方法となっています。[ 5 ]


タートルグラフィックスの基本的な考え方は、3次元空間にも拡張できます。これは、いくつかの異なる座標モデルのいずれかを使用することで実現できます。一般的な設定は、元の2Dタートルと同様に、直交回転方式です。追加の「上」ベクトル(法線ベクトル)を定義して、タートルの2D「前進」ベクトルが回転する平面を選択します。「上」ベクトル自体も「前進」ベクトルを中心に回転します。事実上、タートルは2つの異なる進行方向角を持ち、1つは平面内で、もう1つは平面の角度を決定します。通常、平面の角度を変更しても、従来の設定と同様に、タートルは移動しません。
Verhoeff 2010 [ 6 ]は 2 つのベクトルアプローチを実装しています。ロールコマンドを使用して、「上」ベクトルを「前」ベクトルの周りに回転させます。記事では、基となるタートル プログラムの構文特性から幾何学的特性を証明するための代数理論を展開しています。その洞察の 1 つは、ダイブコマンドが実際にはターン - ロール - ターン シーケンスの省略形であるということです。
Cheloniidae Turtle Graphics はJava用の 3D タートル ライブラリです。 「回転直交座標タートル」には、 bankコマンド ( rollと同じ) とpitchコマンド ( diveと同じ) があります。非ユークリッド幾何学を含む他の座標モデルも使用できますが、含まれていません。[ 7 ]
以下のPythonコードは、turtleモジュールを使用して虹色の螺旋を描きます。
import turtle as tt.shape ( " turtle " )x = 1 t.speed ( 10 ) colors = [ "red" , " orange " , "yellow" , "green" , "blue" , "purple" ]for i in range ( 100 ) : for i in colors : t.forward ( x * 0.3 ) t.left ( 60 ) t.color ( i ) t.right ( 30.5 ) x = x + 1