1. まとめトップ

幾何学模様:スピログラフの描き方 花模様 おしゃれ定規

プラスチック製の板に歯車状の穴が空けられており、穴の内側にそれより小さい歯車(ピニオン)を付け、ピニオンに空けられた小さな穴にボールペンや鉛筆などの筆記具の先を通す。筆記具でピニオンを回す様にして動かすことで、その軌跡が内サイクロイド曲線を描き出し、万華鏡を思わせる幾何学模様となる。

更新日: 2016年12月30日

76 お気に入り 89163 view
お気に入り追加

この記事は私がまとめました

twcritiqueさん

「スピログラフ」という名称はハズブロの登録商標である。

1965年にイギリス人発明家のデニス・フィッシャーが考案したといわれ、商品化されたのは1966年のことである。日本においてもその直後に導入され、子供を中心にブームとなった。現在は100円ショップなどでも購入できる。

その数式

スピログラフの数式を知りたい場合は トロコイド、サイクロイド を調べるとよいでしょう。内トロコイド(ハイポトロコイド)がスピログラフの図形です。

定円の半径を rc、動円の半径を rm、回転角を θ、描画点の半径を rd とすると、内トロコイドの媒介変数表示は
によって表される曲線である。ハイポトロコイド(Hypotrochoid) とも呼ばれる。rd=rmのとき内サイクロイドとなる。また特にrc=2rmのとき、描画点の軌跡は楕円を描く。

スピログラフにたどり着くまで

var x2 = (R+r)*Math.cos(i*Math.PI/72) - (r+O)*Math.cos(((R+r)/r)*(i*Math.PI/72));
var y2 = (R+r)*Math.sin(i*Math.PI/72) - (r+O)*Math.sin(((R+r)/r)*(i*Math.PI/72));
ctx.lineTo(x2,y2);
x1 = x2;

var x1 = R-O;
var y1 = 0;
var i = 1;
ctx.beginPath();
ctx.moveTo(x1,y1);
do {
if (i>20000) break;
var x2 = (R+r)*Math.cos(i*Math.PI/72) -
(r+O)*Math.cos(((R+r)/r)*(i*Math.PI/72))
var y2 = (R+r)*Math.sin(i*Math.PI/72) -
(r+O)*Math.sin(((R+r)/r)*(i*Math.PI/72))
ctx.lineTo(x2,y2);
x1 = x2;
y1 = y2;
i++;
} while (x2 != R-O && y2 != 0 );
ctx.stroke();

図は rc = 5, rm = 3, rd = 5 の内トロコイド

LET r1 = 7 ! 定円半径
LET r2 = 3 ! 動円半径
LET r3 = 2 ! 動円内描画点の半径
LET prompt$="半径r1,r2,r3を入力(デフォルト値 " &
& & STR$(r1) & "," &STR$(r2) & "," & STR$(r3) & ")"
WHEN EXCEPTION IN
INPUT PROMPT prompt$ : r1,r2,r3
USE
END WHEN
LET ar1 = ABS( r1 )
LET ar2 = ABS( r2 )
LET ar3 = ABS( r3 )
! 周回数

幾何学模様の描き方

SketchUp Pro 8 は、パワフルな機能を備えたプロの設計家やエンジニアのためのアプリケーション スイートです。

LET win_size = ar1 !定円
IF r1 * r2 < 0 THEN ! r1,r2のどちらか一方が負の場合は外トロコイド
LET win_size = win_size + ar2 * 2
ELSEIF ar2 > ar1 THEN ! 内トロコイドだが、動円の方が大きい場合
LET win_size = win_size + ( ar2 - ar1 ) * 2
END IF
IF ar3 > ar2 THEN ! 動円の外の軌跡を描く場合
LET win_size = win_size + ( ar3 - ar2 )
END IF
SET WINDOW -(win_size+1), win_size+1, -(win_size+1), win_size+1

1 2 3 4