青海波

青海波には,波の数や位置など,すこしずつ違ったものがあります。

ここでは,手作業で描いたのと同じ形のものを描きます。変わり青海波と呼ばれることもあります。

手作業で描くときは,このようにして描きました。

中央の,ハイライトしている円はプログラムでは上の弧だけを描きますが,問題は描き始めと描き終わりの位置です。

左右の半円との交点が描き始め,描き終わりの点になるのですが,これは試行錯誤で決めることにしましょう。

基本パターンは次のようになりますが,弧の描き始めと描き終わりの点を決めるためには左右の半円も描いておく必要があります。

その半円は最終的には消します。

まず半円を3つ描きます。半径は2にしておきました。

    drawpat():=(

arc([0,0],2,0,pi);

arc([-2,-2],2,0,pi);

arc([2,-2],2,0,pi);

    );

これで,//drawpat(); // パターンを一つ描く の先頭の//を削除して実行します。

中の弧を,描き始めと描き終わりを適当にして描きます。

arc([0,0],1.5,-0.2,3.2);

を追加します。同心円なので中心は原点です。−0.2と3.2は「だいたいこのへんかな」でやってみました。

「矩形領域を画面サイズに拡大」ツールを使って拡大しておきましょう。

右側(描き始め)がはみ出しています。左側(描き終わり)もわずかにはみ出ていますね。

arc([0,0],1.5,-0.05,3.19);

ぐらいがよさそうです。方眼が邪魔なら非表示にするとよいでしょう。

もう一つの弧も同じように描きます。今度は同心円ではないので中心と半径を適当に変えます。

たとえば,

arc([0,-2],2,1.05,2.09);

としますが,中心と半径はこれには限りません。

「画面サイズを矩形領域に縮小」ツールで戻しておきましょう。

これで基本パターンが描けました。左右の半円はもういりません。

    drawpat():=(

arc([0,0],2,0,pi);

arc([0,0],1.5,-0.05,3.19);

arc([0,-2],2,1.05,2.09);

    );

平行移動量は

    Shiftx=[4,0];  // 1行分描くための横への平行移動量

    Shifty=[2,2];  // 上への平行移動量

でよいですね。

内側の円を同心円にして,両端を線分にすると次のようになります。

    drawpat():=(

arc([0,0],2,0,pi);

arc([0,0],1.5,-0.05,3.19);

arc([0,0],1,0,pi);

draw([[1,0],[1,-0.28]]);

draw([[-1,0],[-1,-0.28]]);

    );