矢印を描く

Last modified: 2019 年 03 月 21 日 00 時

CindyScriptで曲がった矢印などを描く。KeTpic版の焼き直し

主な使用関数: Anglemark, Paramark, Arrowhead, Listplot, Circledata, Letter.

矢印の描画

Cinderella 2での作図

KeTCindyのスクリプトを利用したいので、templete1basic.cdyなどを開いて、これを別名に保存します。
まず、冒頭のような図形をCinderella 2で描きます。

810x587(44941bytes)

点Aを中心とし、半径を線分ABとする円上の適当なところに点Dを置きます。CindyScriptで、Listplot("1", [A,D]); とすると、線分ADのプロットデータにsg1という名前が付きます(普段は省略します)。このプロットデータは後で使います:

Listplot("1", [A,D]);              //線分AD
Listplot([B,E]);                   //線分BE
Circledata([A,B], ["Num=400"]);    //円の描画
Circledata([C,B], ["Num=400"]);    //Numは分割数

さらに、AnglemarkParamarkで角記号を描けます:

Paramark([A,E,B], [0.4]);
Anglemark([B,A,E], [0.8,"Expr=1.6,\theta"]);

810x587(50841bytes) [このページのトップへ]

矢印の書き込み

矢印の部分を赤色で書き込んでいきます:

Setcolor("red");
Circledata("1",[A,F],["Num=400","Rng=[0,pi/2]"]);
Arrowhead(G,"cr1",[1,20,"l"]);
Arrowhead(F,"Invert(cr1)",[1,25,"l"]);
Arrowhead(D,"sg1",[1,20,"l"]);
Arrowhead(E,"Invert(sg1)",[1,25,"l"]);
Listplot([E,D]);
Setcolor("black");

Circledata("1",[A,F],["Num=400","Rng=[0,pi/2]"]);とすると、点Aを中心とし、線分AFを半径とする円のうち、$0$〜$\frac{\pi}{2}$の部分の円弧を描きます。このプロットデータにcr1という名前が付きました。Arrowhead(G,"cr1",[1,20,"l"]);で、cr1上の点Gに矢印を描きます。ただし、矢印の方向はcr1の向きに従います。[矢印の大きさ,開き角,矢印の種類]というオプションも付けています。また、Invert(cr1)とすることで、cr1と逆向きの曲線を得られます。

810x587(50841bytes)

これで出来上がりです。KeTCindy(Cinderella)の良いところは円周上の点Dを動かして図を変えることができるところです:

810x587(50841bytes) [このページのトップへ]

サンプルファイルとCindyScriptコード

サンプルファイル(.cdy)のダウンロード
以下はDraw部分のコード:
Ketinit();

Addax(1);    //座標軸を描く
Setpen(2);
Ptsize(3);
Setunitlen("10mm");

Listplot("1", [A,D]);              //線分AD
Listplot([B,E]);                   //線分BE
Circledata([A,B], ["Num=400"]);    //円の描画
Circledata([C,B], ["Num=400"]);    //Numは分割数
Paramark([A,E,B], [0.4]);
Anglemark([B,A,E], [0.8,"Expr=1.6,\theta"]);

Setcolor("red");
Circledata("1",[A,F],["Num=400","Rng=[0,pi/2]"]);
Arrowhead(G,"cr1",[1,20,"l"]);
Arrowhead(F,"Invert(cr1)",[1,25,"l"]);
Arrowhead(D,"sg1",[1,20,"l"]);
Arrowhead(E,"Invert(sg1)",[1,25,"l"]);
Listplot([E,D]);
Setcolor("black");

Letter(A, "sw", "O");              //各点に記号を書き込む
Letter(B, "se", "A");
Letter(D, "ne", "P");
Letter(E, "nw", "Q");


//Figpdf();
Windispg();

//Help("List");

[このページのトップへ]