家紋: 丸に千鳥
家紋の丸に千鳥。千鳥の描き方の参考文献が見つからなかったので、お手本を見ながら試行錯誤で作っていますので、正しい方法ではないと思います。上絵師によっても千鳥は大きく違いますし。丸っこく可愛く描くことを心がけました。
参考書籍等:
- 見て楽しい 読んで学べる 家紋のすべてがわかる本 / 高澤 等 / PHP研究所
- 卍の魔力、巴の呪力 / 泡坂妻夫 / 新潮選書
- 家紋の話 ―上絵師が語る紋章の美― / 泡坂妻夫 / 新潮選書
主な使用関数: Partcrv, Joincrvs, Rotatedata, Reflectdata, Shade, Circledata.
Cinderella 2での作図(丸に千鳥)
KeTCindyのスクリプトを利用したいので、templete1basic.cdyなどを開いて、これを別名に保存します。
円ツールと線分ツールを使って、図のように円ABと直線AB・垂線ACを作り、ずれないように点Aと点Bは固定(pinning)します。円CAを描くと、傾き30度の直線が描けます。もちろん、傾き指定の直線ツールで描いてもOK。
円ABの半径の3分の2くらいの円AE (おなか)を描き、点Fを通る垂線を描きます。
図のような小円HGが翼の後側になります。
円FKを描いて、翼になります。点Lを取って、次にここに円を接続します。
円を接続します。軸AEの交点Oを中心に円ONを描いて、頭とします。
点G、点K、円HGを線分AEについて対称移動しておきます。
円FKに接続する円を左側に描きます。すなわち、点Vを取って、円WVを描きます。
あとはくちばしと目の部分を線分と円で描いています。
足の描画に入ります。軸AE上に円の中心を取っていますが、足のデザインが気に入らなかったので、あとで変えることになります。
点の添字順に円を描いてます。
点P9と点P11の中点を取って、点Aと直線で結びます。これは、左足を回転移動させて右足とするための補助線です。
$\angle\,\text{P}_{11}\text{AE}$ の角度を、角度ツールで計ります。直線P11A、直線AEを順にクリックします。
22.7度ということがわかりました。図の見やすさのため、角の表示ツールを使って、角記号を表示しています。
22.7度の2倍の分だけ点Aを中心に回転させます:
//足
Circledata("9a",[P1,P2],["nodisp","Num=600"]);
Partcrv("9a",P21,P3,"cr9a",["nodisp"]);
Circledata("9b",[P4,P5],["nodisp","Num=600"]);
Partcrv("9b",P5,P3,"cr9b",["nodisp"]);
Circledata("9c",[P6,P5],["nodisp","Num=600"]);
Partcrv("9c",P5,P7,"cr9c",["nodisp"]);
Circledata("9d",[P8,P7],["nodisp","Num=600"]);
Partcrv("9d",P22,P7,"cr9d",["nodisp"]);
Circledata("9e",[A,P21],["nodisp","Num=600"]);
Partcrv("9e",P21,P22,"cr9e",["nodisp"]);
AddGraph("9",["part9a","part9b","part9c","part9d"]);
//Joincrvs("9",["part9a","Invert(part9b)","part9c","Invert(part9d)","Invert(part9e)"],["nodisp"]);
Rotatedata("9","ad9",2*28.5*pi/180);
各円弧をAddGraphでまとめてから、Rotatedataで回転移動させます。
足の形が気にいらないので、変えることにしました。点の位置を動かしています。
千鳥を囲む輪を描きます。点Bより少し遠い位置に点P12と点P13を取ります。輪の太さを直径の1/9にするため、
P13.x=P12.x+2*P12.x/9;
とします。
角度が複素表示になっているときがありますが、見た目以外には問題ありません。
足の付け根を胴体から離すように描きます。円AEよりわずかに大きい円AP20を取って、足の部分との交点を求めておきます。
足の形を変えるため、軸AE上にある中心点を軸から離すことにします。
半田ツールを選択し、点P1を軸AEより離します。移動ツールでは点P1は軸AE上を離れることはありませんが(点P1は軸AE上にあるというプロパティをもっているので)、半田ツールを使えば、自由に動かすことができます(上記のプロパティはなくなります)。逆に、他の直線や円上にある、というプロパティにすることもできます。
他の点も調整します。
最後に、Shadeで塗りつぶします。途中で点の位置や曲線の形を変えたくなったときのために、Shade関数の表示を切り替える機構を作ると便利です。ShadeOnという定数を用意して、Shade関数を使うところではIf文で切り替えましょう:
ShadeOn=1;
If(ShadeOn==1,
Shade(["cr0b"]);
Shade(["cr0a"],["Color=white"]);
,);
他の部分は下のコードを参考にしてください。
[このページのトップへ]
サンプルファイルとCindyScriptコード
サンプルファイル(.cdy)と出力されたPDFファイルのダウンロード
Ketinit();
Setunitlen("8mm");
Addax(0);
Setpen(1);
ShadeOn=1;
P13.x=P12.x+2*P12.x/9;
Circledata("0a",[A,P12],["Num=600"]);
Circledata("0b",[A,P13],["Num=600"]);
If(ShadeOn==1,
Shade(["cr0b"]);
Shade(["cr0a"],["Color=white"]);
,);
//Circledata("0",[A,B],["do,2"]);
Circledata("1",[A,E],["nodisp","Num=600"]);
Partcrv("1",U,G,"cr1");
Circledata("2",[H,G],["nodisp","Num=600"]);
Partcrv("2a",K,G,"cr2");
Reflectdata("2b","part2a",[A,E]);
Circledata("3",[F,K],["nodisp","Num=600"]);
Partcrv("3a",K,L,"cr3");
Partcrv("3b",V,T,"cr3");
Circledata("4",[M,L],["nodisp","Num=600"]);
Partcrv("4",N,L,"cr4");
Circledata("5",[O,N],["nodisp","Num=600"]);
Partcrv("5",N,Y,"cr5");
Listplot("6",[Y,X]);
Circledata("7",[W,X],["nodisp","Num=600"]);
Partcrv("7",V,X,"cr7");
Circledata("8",[Z,P0],["Num=600"]);
Joincrvs("Body",["part1","Invert(part2a)","part3a","Invert(part4)","part5","sg6","Invert(part7)","part3b","Invert(re2b)"],["nodisp"]);
If(ShadeOn==1,
Shade(["joinBody"]);
Shade(["cr8"],["Color=white"]);
,);
//足
Circledata("9a",[P1,P2],["nodisp","Num=600"]);
//Partcrv("9a",P2,P3,"cr9a");
Partcrv("9a",P21,P3,"cr9a",["nodisp"]);
Circledata("9b",[P4,P5],["nodisp","Num=600"]);
Partcrv("9b",P5,P3,"cr9b",["nodisp"]);
Circledata("9c",[P6,P5],["nodisp","Num=600"]);
Partcrv("9c",P5,P7,"cr9c",["nodisp"]);
Circledata("9d",[P8,P7],["nodisp","Num=600"]);
//Partcrv("9d",P9,P7,"cr9d");
Partcrv("9d",P22,P7,"cr9d",["nodisp"]);
Circledata("9e",[A,P21],["nodisp","Num=600"]);
Partcrv("9e",P21,P22,"cr9e",["nodisp"]);
AddGraph("9",["part9a","part9b","part9c","part9d"],["nodisp"]);
Joincrvs("9",["part9a","Invert(part9b)","part9c","Invert(part9d)","Invert(part9e)"],["nodisp"]);
//Rotatedata("9","ad9",2*28.5*pi/180);
Rotatedata("9","join9",2*28.3*pi/180,["nodisp"]);
If(ShadeOn==1,
Shade(["join9"]);
Shade(["rt9"]);
,);
Circledata("10a",[P14,P17],["nodisp","Num=600"]);
Partcrv("10a",P19,P17,"cr10a",["nodisp"]);
Circledata("10b",[P16,P17],["nodisp","Num=600"]);
Partcrv("10b",P19,P17,"cr10b",["nodisp"]);
Joincrvs("10",["part10a","Invert(part10b)"],["nodisp"]);
If(ShadeOn==1,
Shade(["join10"],["Color=white"]);
,);
Windispg();
[このページのトップへ]