サンプルいろいろ

4

では，MEPOTEX を実際に使ってみましょう．以下ではサンプルの図版と，それを出力するためのソースを併記していきます．METAPOST の文法などは必要最小限しか書いていません．ある程度まとまった解説は 3 を参照して下さい．
個々のマクロについての解説は 5 を参照して下さい．

4.1

点の設定，円・多角形

A
図5
図6

D

E

A

D

図4

E

B

C

B

C

図 4 のソース\begin{MPpic}<1cm>(3|3,4.5|0.5)(0,-2)\sendMP{z0=origin; z1=3w*dir(-30); z2=2w*dir40;% 3 点 z0, z1, z2 を設定
z1 + z3 = z2 + z4 = 2*z0;%

z1 と z3 の中点,z2 と z4 の中点を z0 に

xdraw(1pt) z1--z3;%

z1 と z3 を結ぶ線分を描く

xdraw(1pt) z2--z4;}%

z2 と z4 を結ぶ線分を描く\mptZuLabel{(0,-1.5h)}{交差}%

図番号と参照用ラベル (\label{交差}と同等) を指定\end{MPpic}
図 5 のソース\begin{MPpic}<1cm>(4,4.5|0.5)\mptPoint{z.A}[A][b]<0mm,1mm>{(3w,4h)}%

点 z.A を定義し同時にラベル「A」を図に書き込む\mptPoint{z.B}[B][tr]<-1mm,0mm>{origin}%

点 z.B についても同様\mptPoint{z.C}[C][tl]<1mm,0mm>{(4w,0)}%点 z.C についても同様\mptPoint{z.D}[D][r]<-1mm,0mm>{0.8[z.A,z.B]}% z.D は z.A,z.B を 0.8:0.2 に分ける点として定義\mptPoint{z.E}[E][l]<1mm,0mm>{0.8[z.A,z.C]}%

z.E は z.A,z.C を 0.8:0.2 に分ける点として定義\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%z.A,z.B,z.C,z.A の順に線分で結んで三角形
z.D と z.E も結ぶ (細線)xdraw(0.4pt) z.D--z.E;}%\mptZuLabel{(1.5w,3.5h)}{分点 1}\end{MPpic}
図 6 のソース\begin{MPpic}<1cm>(5.5,4.5|0.5)\mptPoint{z.A}[A][r]<-1mm,1mm>(4pt){(3w,2h)}%

点 z.A を定義し同時にラベル「A」を図に書き込む\mptPoint{z.B}[B][tr]<-1mm,0mm>{(0,0)}%点 z.B についても同様\mptPoint{z.C}[C][tl]<1mm,0mm>{(4w,0)}%点 z.C についても同様\mptPoint{z.D}[D][b]<0mm,1mm>{(-2/3)[z.A,z.B]}% z.D は z.A,z.B を-2:5 に分ける点として定義\mptPoint{z.E}[E][r]<-1mm,0mm>{(-2/3)[z.A,z.C]}% z.E は z.A,z.C を-2:5 に分ける点として定義\sendMP{xdraw(1pt) z.B--z.C--z.E--z.D--cycle;}%z.B,z.C,z.E,z.D,z.B の順に結ぶ\mptZuLabel{(w,3h)}{分点 2}\end{MPpic}
注 負の比の分点 (-2/3)[z.A,z.B] において，(-2/3) の ( ) は必須．

21

ア

2cm

エ

ア

4cm

エ

3cm

3cm
70◦

50◦
イ

6cm

ウ

イ

図7

70◦
ウ

4cm

3cm

図8

図 7 のソース\begin{MPpic}<1cm>(6|0.4,3.8|1.2)\mptPoint{z.i}[イ][tr]<0mm,-1mm>{(0,0)}%点 z.i を定義し同時にラベル「イ」を図に書き込む\mptPoint{z.a}[ア][br]<-1mm,1mm>{z.i+4w*dir50}% z.a は z.i から 50 度方向 4w 移動した点\mptPoint{z.u}[ウ][tl]<0mm,-1mm>{z.i+6w*right}% z.u は z.i から右方向 6w 移動した点\mptPoint{z.e}[エ][bl]<1mm,1mm>{z.a+2w*right}%

z.e は z.a から右方向 2w 移動した点\mptLabel{0.5[z.a,z.i]}[r]<-2mm,0mm>{4cm}%

z.a と z.i の中点に「4cm」と書き込む\mptLabel{0.5[z.i,z.u]}[t]<0mm,-2mm>{6cm}%

z.i と z.u の中点に「6cm」と書き込む\mptLabel{0.5[z.e,z.a]}[b]<0mm,2mm>{2cm}%

z.e と z.a の中点に「2cm」と書き込む\mptAngleMark[label=50$^\circ$,xshift=2mm]{z.u}{z.i}{z.a}% 角度マーク\sendMP{xdraw(1pt) z.a--z.i--z.u--z.e--cycle;}% z.a,z.i,z.u,z.e,z.a を結んで台形\mptZuLabel{(3w,-h)}{台形}\end{MPpic}
図 8 のソース−→ −→−→ −→ −→ −→— 四角形 AIUE が平行四辺形 ⇐⇒ AE = IU ⇐⇒ OE = OA + OU − OI に注意\begin{MPpic}<1cm>(9,3.8|1.2)\mptPoint{z.i}[イ][tr]<-1mm,-1mm>{(0,0)}%点 z.i を定義し同時にラベル「イ」を図に書き込む\mptPoint{z.a}[ア][br]<-1mm,1mm>{z.i+3w*dir70}%

z.a は z.i から 70 度方向 3w 移動した点\mptPoint{z.u}[ウ][tl]<1mm,-1mm>{z.i+4w*right}%

z.u は z.i から右方向 4w 移動した点\mptPoint{z.e}[エ][bl]<1mm,1mm>{z.a + z.u - z.i}% 上の式を用いて z.e を定義
z.A と z.I は z.a と z.i から右に 6w 移動した点\sendMP{z.A - z.a = z.I - z.i = 6w*right;%

z.U は z.I から右に 3w 移動した点

z.U = z.I + 3w*right;}%\mptLabel{0.5[z.a,z.i]}[r]<-2mm,0mm>{3cm}%

z.a と z.i の中点に「3cm」と書き込む\mptLabel{0.5[z.i,z.u]}[t]<0mm,-2mm>{4cm}%

z.i と z.u の中点に「4cm」と書き込む\mptLabel{0.5[z.A,z.I]}[r]<-2mm,0mm>{3cm}%

z.A と z.I の中点に「3cm」と書き込む\mptLabel{0.5[z.I,z.U]}[t]<0mm,-2mm>{3cm}%

z.I と z.U の中点に「3cm」と書き込む\mptAngleMark[label=70$^\circ$,labeldist=10pt]{z.u}{z.i}{z.a}% 角度マーク\mptAngleMark[label=70$^\circ$,labeldist=10pt]{z.U}{z.I}{z.A}% 角度マーク\sendMP{xdraw(1pt) z.a--z.i--z.u--z.e--cycle;%

z.a,z.i,z.u,z.e,z.a を結んで平行四辺形
z.A,z.I,z.U も結ぶ (細線)xdraw(0.4pt) z.A--z.I--z.U;}%\mptZuLabel{(4w,-h)}{平行四辺形}\end{MPpic}

22

D
C
5cm
A

50◦

C
◦

A

M
図 10

図9

◦

B

B
図 9 のソース−→ −→ −→— AB = OB − OA であることに注意\begin{MPpic}<1cm>(9.6|0.4,5)(0,-2.5)%

角 BAC は今後変更することも想定して変数で与えることとします
角 BAC を theta として値を設定 (暫定的に 50 度)\sendMP{numeric theta; theta=50;%

z.D - z.A = (z.B - z.A) rotated theta;% 辺 AD は辺 AB を 50 度回転したもの
四角形 ABCD は平行四辺形 (の一種)

z.C - z.D = z.B - z.A;%

z.A=origin; z.B=z.A+5w*dir(-theta/2);}% z.A と z.B を与える．これで 4 頂点確定
\mptAngleMark[label=50$^\circ$,xshift=2mm]{z.B}{z.A}{z.D}% 角度マーク\mptLabel{z.A}[r]<-1mm,0mm>{A}%上で定義した z.A にラベル「A」を\mptLabel{z.B}[t]<0mm,-1mm>{B}%上で定義した z.B にラベル「B」を\mptLabel{z.C}[l]<1mm,0mm>{C}%上で定義した z.C にラベル「C」を\mptLabel{z.D}[b]<0mm,1mm>{D}%上で定義した z.D にラベル「D」を\mptLabel{0.5[z.D,z.A]}[r]<-2mm,1mm>{5cm}%

z.D と z.A の中点に「5cm」と書き込む\sendMP{xdraw(1pt) z.A--z.B--z.C--z.D--cycle;}% 4 点を結んでひし形\mptZuLabel{(7w,-2h)}{ひし形}\end{MPpic}
図 10 のソース\begin{MPpic}<15mm>(2.5|0.5,3)(0,-0.8)\mptPoint{z.A}[A][tr]<-1mm,-1mm>{origin}%

点 z.A を定義し同時にラベル「A」を図に書き込む\mptPoint{z.B}[B][tl]<1mm,-1mm>{(2w,0)}%点 z.B も同様

\mptPoint{z.C}[C][bl]<0mm,1mm>{2w*dir60}%

点 z.C も同様

\mptPoint{z.M}[M][t]<0mm,-1mm>{0.5[z.A,z.B]}% 点 z.M は z.A と z.B の中点として定義\mptLabel{0.5[z.A,z.M]}{$\circ$}%z.A と z.M の中点に丸印を入れる\mptLabel{0.5[z.B,z.M]}{$\circ$}%z.B と z.M の中点に丸印を入れる\mptRightAngleMark{z.B}{z.M}{z.C}%

直角マーク\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%z.A,z.B,z.C を結んで三角形

xdraw(0.4pt) z.C--z.M;}%

z.C と z.M も結ぶ (細線)

\mptZuLabel{(w,-0.5h)}{正三角形}\end{MPpic}
A

A

A
図 11

図 14

図 13

B
F

B

A

D

F

C

E

E

D

CF

B

図 12

E

B

23

C

C

D
E

D

F

図 11 のソース

\begin{MPpic}<8mm>(5.3|0.2,4.6|0.6)\sendMP{SetTriangle(z.A,z.B,z.C)(5,4,6);}%

BC:CA:AB=5:4:6 に設定\mptPoint{z.B}[B][tr]<1mm,0mm>{origin}%

点 z.B を定義し同時にラベル「B」を図に書き込む\mptPoint{z.C}[C][t]<0mm,-1mm>{(5w,0)}%点 z.C も同様 (この時点で z.A も確定)

\mptPoint{z.A}[A][b]<0mm,1mm>{z.A}% 点

z.A はすでに確定しているので定義はダミー (z.A=z.A)\mptPoint{z.D}[D][t]<0mm,-1mm>{4/7[z.B,z.C]}%

点 z.D は z.B,z.C を 4:3 に分ける点\mptPoint{z.E}[E][bl]<1mm,0mm>{3/11[z.C,z.A]}% 点 z.E は z.C,z.A を 3:8 に分ける点\mptPoint{z.F}[F][br]<0mm,0mm>{2/3[z.A,z.B]}%

点 z.F は z.A,z.B を 2:1 に分ける点\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%

三角形を太線でfor pth=z.A--z.D, z.B--z.E, z.C--z.F: xdraw(0.4pt) pth; endfor}% 補助線を細線で\mptZuLabel{(w,3h)}{チェバ 1}\end{MPpic}
図 12 のソース\begin{MPpic}<8mm>(5.3|0.2,4.6|0.6)\sendMP{SetTriangle(z.A,z.B,z.C)(5,4,6);}%

BC:CA:AB=5:4:6 に設定\mptPoint{z.B}[B][r]<-1mm,0mm>{(2w,2h)}%

点 z.B を定義し同時にラベル「B」を図に書き込む\mptPoint{z.C}[C][l]<1mm,0mm>{(4.5w,2h)}%

点 z.C も同様 (この時点で z.A も確定)

\mptLabel{z.A}[b]<0mm,1mm>{A}%

点 z.A はすでに確定しているので定義せずラベルだけでもよい\mptPoint{z.D}[D][br]<1mm,1mm>{1/2[z.B,z.C]}%

点 z.D は z.B,z.C を 1:1 に分ける点\mptPoint{z.E}[E][t]<0mm,-1mm>{(-1)[z.C,z.A]}% 点 z.E は z.C,z.A を-1:2 に分ける点\mptPoint{z.F}[F][t]<0mm,-1mm>{2[z.A,z.B]}%

点 z.F は z.A,z.B を 2:-1 に分ける点\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%

三角形を太線でfor pth=z.A--InSecPoint(z.B,z.E)(z.C,z.F)(), z.B--z.E--z.C, z.C--z.F--z.B:
補助線を細線で

xdraw(0.4pt) pth; endfor}%\mptZuLabel{(3w,0)}{チェバ 2}\end{MPpic}
図 13 のソース\begin{MPpic}<8mm>(5.3|0.2,4.6|0.6)\sendMP{SetTriangle(z.A,z.B,z.C)(40,-12,-11);}% 角 A を 40 度，CA:AB=12:11 に設定
点 z.B を定義し同時にラベル「B」を図に書き込む\mptPoint{z.B}[B][t]<0mm,-1mm>{origin}%

点 z.C も同様 (この時点で z.A も確定)

\mptPoint{z.C}[C][t]<0mm,-1mm>{(3w,0)}%\mptPoint{z.A}[A][b]<0mm,1mm>{z.A}%

点 z.A はすでに確定しているので定義はダミー (z.A=z.A)\mptPoint{z.D}[D][t]<0mm,-1mm>{5/3[z.B,z.C]}%

点 z.D は z.B,z.C を 5:-2 に分ける点\mptPoint{z.E}[E][bl]<1mm,0mm>{2/7[z.C,z.A]}%\mptPoint{z.F}[F][br]<0mm,0mm>{1/2[z.A,z.B]}%

点 z.E は z.C,z.A を 2:5 に分ける点\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%

三角形を太線で

点 z.F は z.A,z.B を 1:1 に分ける点
補助線を細線で

xdraw(0.4pt) z.C--z.D--z.F;}%\mptZuLabel{(3w,3h)}{メネラウス 1}\end{MPpic}24

図 14 のソース

\begin{MPpic}<8mm>(5.3|0.2,4.6|0.6)\sendMP{SetTriangle(z.A,z.B,z.C)(40,-12,-11);}%\mptPoint{z.B}[B][r]<-1mm,0mm>{(1.5w,2h)}%

角 A を 40 度，CA:AB=12:11 に設定\mptPoint{z.C}[C][bl]<1mm,1mm>{(3w,2h)}%

点 z.C も同様 (この時点で z.A も確定)

点 z.B を定義し同時にラベル「B」を図に書き込む

点 z.A はすでに確定しているので定義せずラベルだけでもよい\mptLabel{z.A}[b]<0mm,1mm>{A}%

点 z.D は z.B,z.C を 2:-1 に分ける点\mptPoint{z.D}[D][b]<0mm,1mm>{2[z.B,z.C]}%\mptPoint{z.E}[E][tl]<1mm,0mm>{(-1/3)[z.C,z.A]}% 点 z.E は z.C,z.A を-1:4 に分ける点\mptPoint{z.F}[F][t]<0mm,-1mm>{2[z.A,z.B]}%

点 z.F は z.A,z.B を 2:-1 に分ける点\sendMP{xdraw(1pt) z.A--z.B--z.C--cycle;%

三角形を太線で

xdraw(0.4pt) z.B--z.F--z.D--z.C--z.E;}%

補助線を細線で\mptZuLabel{(3.5w,4h)}{メネラウス 2}\end{MPpic}
45◦

40◦
60◦

α
100◦

β

θ

図 16

γ

30◦
図 15
図 15 のソース\begin{MPpic}<1cm>(6,4)(0,-2)\sendMP{z1=(0,h); z2=z1+6w*right; z3=z1+2h*down; z4-z3=z2-z1;% z1 から z4 を定義
z6=(w,-2h); z8=z6+0.5w*right;%
z5-z6=whatever*dir100;%z7-z8=whatever*dir45;%y5=y7=2h;%z6 と z8 も定義
z6 と z5 を結ぶ線分は 100 度方向
z8 と z7 を結ぶ線分は 45 度方向

z5 と z7 の高さ (y 座標) を 2h に (これと上の 2 行で z5 と z7 も決まる)

z.a=InSecPoint(z1,z2)(z5,z6)();%

z.a は z1 と z2，z5 と z6 を結ぶ 2 直線の交点

z.b=InSecPoint(z3,z4)(z5,z6)();%

z.b は z3 と z4，z5 と z6 を結ぶ 2 直線の交点

z.c=InSecPoint(z3,z4)(z7,z8)();%

z.c は z3 と z4，z7 と z8 を結ぶ 2 直線の交点

z.d=InSecPoint(z1,z2)(z7,z8)();}% z.d は z1 と z2，z7 と z8 を結ぶ 2 直線の交点\mptAngleMark[label=$\alpha$,labeldist=8pt]{z6}{z.a}{z2}%角度マーク\mptAngleMark[label=$\beta$,labeldist=8pt]{z5}{z.b}{z3}%角度マーク\mptAngleMark[label=$\gamma$,labeldist=8pt]{z4}{z.c}{z7}%角度マーク\mptAngleMark[label=100$^\circ$,markradius=12pt,labeldist=10pt]{z4}{z.b}{z5}% 角度マーク\mptAngleMark[label=45$^\circ$,labeldist=10pt]{z2}{z.d}{z7}%角度マーク\sendMP{for pth=z1--z2, z3--z4, z5--z6, z7--z8: xdraw(1pt) pth; endfor}%

線分を 4 本描く

\mptZuLabel{(5w,-1.8h)}{平行線 1}\end{MPpic}
図 16 のソース\begin{MPpic}<7mm>(10,5)\sendMP{z1=(0,h); z2=z1+10w*right; z3=z1+4h*up; z4-z3=z2-z1; z5=0.5[z1,z2];% z1 から z5 を定義
z8=whatever[z3,z4];%

z8 は z3,z4 を結ぶ直線上

y8 - y7 = y7 - y6 = y6 - y5;%z8,z7,z6,z5 の高さ (y 座標) の差を等間隔に

z6 - z5 = whatever*dir30;%

z5 と z6 を結ぶ線分は 30 度方向

z8 - z7 = whatever*dir40;%

z7 と z8 を結ぶ線分は 40 度方向

z6 - z7 = whatever*dir(-20);}%z7 と z6 を結ぶ線分は-20 度方向
25

\mptAngleMark[label=40$^\circ$,labeldist=10pt]{z3}{z8}{z7}%角度マーク\mptAngleMark[label=60$^\circ$,labeldist=10pt]{z6}{z7}{z8}%角度マーク\mptAngleMark[label=$\theta$]{z7}{z6}{z5}%角度マーク\mptAngleMark[label=30$^\circ$,labeldist=12pt]{z2}{z5}{z6}%角度マーク\sendMP{for pth=z1--z2, z3--z4, z5--z6--z7--z8: draw pth; endfor}% ← 通常の draw 命令だと線の\mptZuLabel{(w,2h)}{平行線 2}%
太さ等はデフォルト値に\end{MPpic}

A

C

A

図 18

A

B

4

D

B
3

1

図 17

P

2

B

C

C

t=0

s+t=1
図 19

s=0

図 17 のソース\begin{MPpic}<9mm>(5|0.4,6)(0,-1.5)\sendMP{SetTriangle(z.A,z.B,z.C)(0,50,70);}%角 B=50 度，角 C=70 度に設定 (角 A は自動で計算される)\mptPoint{z.B}[B][r]<-1mm,0mm>{origin}%

点 z.B を定義し同時にラベル「B」を図に書き込む\mptPoint{z.C}[C][l]<1mm,0mm>{(5w,0)}%点 z.C も同様 (この時点で z.A も確定)

\mptPoint{z.A}[A][b]<0mm,1mm>{z.A}%

点 z.A はすでに確定しているので定義はダミー (z.A=z.A)\mptPoint{z.D}[D][bl]<1mm,1mm>(3pt){3/5[z.B,z.C]}%

点 z.D は z.B,z.C を 3:2 に分ける点\mptPoint{z.P}[P][tr]<-1mm,0mm>{5/4[z.A,z.D]}%

点 z.P は z.A,z.D を 5:-1 に分ける点\sendMP{xfilldraw(5pt*dir45)(1pt)z.A--z.B--z.D--cycle;% 三角形 ABD を描いて斜線引き

xfilldraw(5pt*dir-45)(1pt) z.P--z.C--z.D--cycle;% 三角形 PCD もz.A と z.C を結ぶ

xdraw(1pt) z.C--z.A;}%\mptFromTo[label=2,labelpos=0.7]{z.C}{z.D}%

z.C と z.D を弧で結んで少し z.D よりに「2」と記入\mptFromTo[label=3]{z.D}{z.B}%

z.D と z.B を弧で結んで中央に「3」と記入\mptFromTo[label=4]{z.D}{z.A}%

z.D と z.A を弧で結んで中央に「4」と記入\mptFromTo[label=1,labeldist=1pt]{z.P}{z.D}%

z.P と z.D を弧で結んで中央に「1」と記入%

注：これらの弧は，進行方向 (第 2 引数->第 3 引数) に向かって左に張り出します．

\mptZuLabel{(1w,-1.2h)}{三角形領域 1}\end{MPpic}

図 18 のソース\begin{MPpic}<6.3mm>(6.5|1.5,8)(0,-2)\sendMP{SetTriangle(z.A,z.B,z.C)(0,50,70);}% 角 B=50 度，角 C=70 度に設定 (角 A は自動で計算される)\mptPoint{z.B}[B][br]<0mm,1mm>{origin}%

点 z.B を定義し同時にラベル「B」を図に書き込む\mptPoint{z.C}[C][bl]<0mm,1mm>{(5w,0)}%点 z.C も同様 (この時点で z.A も確定)

\mptLabel{z.A}[bl]<1mm,-1mm>{A}%

点 z.A はすでに確定しているので定義せずラベルだけでもよい26

\mptPoint{z.a}[$t=0$][t]<0mm,-1mm>{4/3[z.A,z.B]}%

点 z.a は z.A,z.B を 4:-1 に分ける点\mptPoint{z.b}[$s=0$][t]<0mm,-1mm>{4/3[z.A,z.C]}%

点 z.b は z.A,z.C を 4:-1 に分ける点\mptPoint{z.c}[$s+t=1$][l]<1mm,0mm>{4/3[z.B,z.C]}% 点 z.c は z.B,z.C を 4:-1 に分ける点\mptPoint{z.d}{4/3[z.B,z.A]}%

点 z.d は z.B,z.A を 4:-1 に分ける点\mptPoint{z.e}{4/3[z.C,z.A]}%\mptPoint{z.f}{4/3[z.C,z.B]}%

点 z.e は z.C,z.A を 4:-1 に分ける点\sendMP{xfill(5pt*dir45)

点 z.f は z.C,z.B を 4:-1 に分ける点
斜線を引く

z.B--z.C--z.b--z.a--cycle;%

斜線を引く

xfill(5pt*dir-45) z.A--z.d--z.e--cycle;%for pth=z.a--z.d, z.b--z.e, z.c--z.f: xdraw(1pt) pth; endfor}% 線分を描く\mptZuLabel{(0.5w,4h)}{三角形領域 2}\end{MPpic}
図 19 のソース\begin{MPpic}<6mm>(7.5|2.5,12|1)(0,-6)\sendMP{SetTriangle(z.A,z.B,z.C)(40,50,0);}% 角 A=40 度，角 B=50 度に設定 (角 C は自動で計算される)
点 z.A を定義し同時にラベル「A」を図に書き込む\mptPoint{z.A}[A][r]<-1mm,0mm>{origin}%

点 z.B も同様 (この時点で z.C も確定)

\mptPoint{z.B}[B][tl]<1mm,0mm>{(5w,0)}%点 z.C はすでに確定しているので定義せずラベルだけでもよい\mptLabel{z.C}[b]<0mm,1mm>{C}%

Polygon 命令を使って正方形を描くつもり．まず正方形の頂点のうち 2 つずつを与えておく．

%\sendMP{z.a.v1=z.C; z.a.v2=z.B; z.b.v1=z.A; z.b.v2=z.C; z.c.v1=z.B; z.c.v2=z.A;
xdraw(1pt) Polygon(4,z.a);% 中心 z.a(上の z.a.v1=z.C; z.a.v2=z.B; で決定される) の正方形描画
xdraw(1pt) Polygon(4,z.b);% 中心 z.b(上の z.b.v1=z.A; z.b.v2=z.C; で決定される) の正方形描画
xdraw(1pt) Polygon(4,z.c);% 中心 z.c(上の z.c.v1=z.B; z.c.v2=z.A; で決定される) の正方形描画
平行四辺形の頂点 z0,z1 を決定

z0-z.c.v3=z.C-z.A; z1-z.b.v4=z.B-z.A;%

xfilldraw(PineGreen)(0.4pt) z.A--z.c.v3--z0--z.C--cycle;}% 平行四辺形塗りつぶし\mptDrawPath[filltype=shasen,fillcolor=blue,shawidth=1pt]{z.A--z.B--z1--z.b.v4--cycle;}%↑ 太い斜線を使うので，細かくオプションを選べる \mptDrawPath を使用\mptRightAngleMark{z.A}{z.C}{z.B}%

直角マーク\sendMP{xdraw(1pt) z.A--z.B--z.C;}% 三角形 (平行四辺形の塗りつぶしで辺が消されないようここで描く)\mptZuLabel{(2.5w,-5.8h)}{三平方}\end{MPpic}

図 20 のソース\begin{MPpic}<20mm>(0,0)(1,2.3)\sendMP{SetInsTetragon(z.A,z.B,z.C,z.D)(z.M)(3,4,5,6);}% 4 辺の長さが 3,4,5,6 の四角形
\mptPoint{z.M}[M][t]<0mm,-1mm>(3pt){origin}%

外接円の中心を設定\mptPoint{z.A}[A][b]<0mm,0.5mm>{z.M+w*dir90}%

頂点の 1 つを設定

\mptPoint{z.B}[B][br]<-0.5mm,0mm>{z.B}%↑ の時点で残りの頂点は\mptPoint{z.C}[C][tr]<-0.5mm,0mm>{z.C}%

確定しているので，\mptPoint{z.D}[D][tl]<0.5mm,0mm>{z.D}%

B, C, D の定義はダミー

A
3

B

6
4

\mptFromTo[label=3]{z.A}{z.B} \mptFromTo[label=4]{z.B}{z.C}% 辺の長さM

\mptFromTo[label=5]{z.D}{z.C} \mptFromTo[label=6]{z.A}{z.D}% を表示\sendMP{xdraw(0.8pt) z.A--z.B--z.C--z.D--z.A;% 四角形を描く
xdraw(0.4pt,hasen()) circle(z.M,w);}%\mptZuLabel{(0,-h)}[t]<0mm,-1mm>{内接四角形}\end{MPpic}

27

円を破線で描く

C

5
図 20

D

343
15.9
496
0.78
2
L=

=
さl

長
周の
長さ
周の

図 21
大きい八角形の周の長さ L = 13.255
図 23

図 22
図 21 のソース\begin{MPpic}<2cm>(1|1,1.5|1.5)(0,-0.5)%

Polygon 命令で正五角形を設定 (中心も頂点も未定義なので\sendMP{path pth; pth:=Polygon(5,z0);%

デフォルト値 --- 中心 (0,0) 頂点の 1 つ (w,0) --- 使用)
上で設定した正五角形のパス pth を描画

xdraw(1pt) pth;%xdraw(0.4pt) everyNpoint(2,pth);}% pth の「頂点」を 2 個おきに結んで描画\mptZuLabel{(0,-1.2h)}{五角形}\end{MPpic}
図 22 のソース\begin{MPpic}<1cm>(3.5|2.5,3.5|4)\sendMP{z0v2=(3w,h); z0v1=(2w,0);%
xdraw(1pt) Polygon(7,z0);%z1v1=z2s1=z0v1;%

次行の正七角形の 2 頂点を設定

Polygon 命令で正七角形を設定し，描画

次行の 2 つの正八角形の頂点 z1v1 と辺の中点 z2s1 を上の z0v1 に等置

xdraw(1pt,red) Polygon(8,z1);%

Polygon 命令で正八角形を設定し，描画

xdraw(1pt,blue) Polygon(8,z2);}% Polygon 命令で正八角形を設定し，描画
Polygon 命令は多角形の周の長さ (L. 中心名) を計算してくれるので，それを次に呼び出す．

%\mptLabel{z2s7}[t]<0mm,-3mm>{大きい八角形の周の長さ $L=\UseNumeric{L.z2}$}\mptZuLabel{(0,-3.2h)}{多角形 1}\end{MPpic}
図 23 のソース\begin{MPpic}<1cm>(4|2.5,3.5|4)(0,2)\sendMP{z0v2=(3w,h); z0v1=(2w,0);%

2 行下の多角形の頂点の 2 つを設定

% IPolygon 命令で内接多角形を設定 (各辺の中心角 30,40,50,60,70,110 度) し，描画
xdraw(blue) IPolygon(30,40,50,60,70)(z0);% 注：110=360-(30+40+50+60+70)
z1=z0; z1s1=z0v1;%

2 行下の多角形の中心 (z1) と辺上の点 (z1s1:円との接点) を設定% OPolygon 命令で外接多角形を設定し，描画 (接点と中心を結ぶ中心角 30,40,50,60,70,110 度)
xdraw(red) OPolygon(30,40,50,60,70)(z1);draw circle(z0,z0v1);}%

上記の多角形に「接する」円を描画% IPolygon ,OPolygon 命令も多角形の周の長さを計算してくれるので，それを次に呼び出す．
\mptLabel[origin=b,yshift=1mm,angle=20]{z0}{周の長さ $l=\UseNumeric{L.z0}$}%

文字列を\mptLabel[origin=t,yshift=-1mm,angle=20]{z1}{周の長さ $L=\UseNumeric{L.z1}$}% 傾けてみた\mptZuLabel{(2w,-h)}{多角形 2}\end{MPpic}28

l = 5.19617
L = 10.39233

l = 5.65685
L=8

l = 5.87779
L = 7.26532

l = 6.00003
L = 6.92825

l = 6.07434
L = 6.742

l = 6.12296
L = 6.62744

l = 6.15628
L = 6.55138

l = 6.1804
L = 6.49846

l = 6.19785
L = 6.45947

l = 6.21173
L = 6.43086

l = 6.22206
L = 6.40826

l = 6.23064
L = 6.39088

l = 6.2373
L = 6.37666

l = 6.24277
L = 6.36507

l = 6.24774
L = 6.35599

図 24

29

図 24 のソース

\begin{MPpic}<16mm>(9|1,15|2)
左下の内接多角形の中心．これを基点にして，for 文で他の中心も設定\sendMP{z15=(w,w);%

for n=3 step 3 until 15: z[n+2] - z[n+1] = z[n+1] - z[n] = (3w,0); endfor
for n=3 step 3 until 12: z[n+3] - z[n] = (0,-3h); endfor
for n=3 upto 17:z[n+20] = z[n];z[n+20].s1 = z[n].v1 = z[n] + (0,-h);% 外接多角形用に中心等を複製

xdraw(red)Polygon(n,z[n]);%赤線で内接多角形を描画

xdraw(blue)

Polygon(n,z[n+20]);%青線で外接多角形を描画
緑線で円を描画

xdraw(green) circle(z[n+20],h);%SaveLabel(z[n].v1,"[t]<0mm,-3mm>","$l="&decimal(L.z[n])&"$");%

内接多角形の周長

SaveLabel(z[n+20].s1,"[t]<0mm,-6mm>","$L="&decimal(L.z[n+20])&"$");% 外接多角形の周長
endfor}\mptZuLabel{(4w,-h)}{多角形 3}\end{MPpic}
図 25 のソース\begin{MPpic}<1cm>(3|1,0)(0,1)\sendMP{z0s1=(w,0); z0v1=(w,0.5h);% 六角星の頂点指定
draw StarPath(z0)(6);%六角星の描画

draw StarPath(z1)(5);}%五角星の描画 (頂点はデフォルト)

図 25\mptZuLabel{(w,-h)}[t]{星}\end{MPpic}
図 26

◦

図 27

◦

図 28

◦◦

I

G

H

••

◦
◦

◦
◦

図 30

O

図 29

N

••

図 26 のソース\begin{MPpic}<1cm>(3,2)\sendMP[0.4pt]{%

この \sendMP{} 内では，線のデフォルトの太さを 0.4pt に

z0=(0,0); z1=(3w,0); z2=(2w,2h);%
3 頂点 z0,z1,z2 を設定
for n=0,1,2: draw z[n]--1/2[z[(n+1)mod3],z[(n+2)mod3]]; endfor % 中線%

(n,(n+1)mod3,(n+2)mod3) = (0,1,2), (1,2,0), (2,3,0) です

drawTick(z0--z1)(0.25,0.75)(0)(-2pt,2pt);%

二等分記号を辺 z0--z1 にdrawTick(z1--z2)(0.25,0.75)(-1pt,1pt)(-2pt,2pt);}% 二等分記号を辺 z1--z2 に\mptLabel{0.25[z2,z0]}{$\circ$}%

二等分記号 (丸印) を辺 z2--z0 に\mptLabel{0.75[z2,z0]}{$\circ$}%

二等分記号 (丸印) を辺 z2--z0 に\sendMP{xdraw(1pt) z0--z1--z2--cycle;}% 三角形描画%

重心 G を計算させて 3pt の大きさの点を打ち，ラベル「G」を書き込む\mptPoint{z.G}[G][t]<0mm,-1mm>(3pt){jusin(z0,z1,z2)}\mptZuLabel{(0,2h)}[tl]{重心}\end{MPpic}30

図 27 のソース

\begin{MPpic}<1cm>(3,2)\sendMP{z0=(0,0); z1=(3w,0); z2=(2w,2h);}% 3 頂点 z0,z1,z2 を設定% ↓内心 I を計算させて 3pt の大きさの点を打ち，ラベル「I」を書き込む --- 重心のときと違う書式を\mptPoint[pensize=3pt,label=I,origin=t,yshift=-1.5mm]{z.I}{naisin(z0,z1,z2)}% 使ってみました%

角の 2 等分線 (z.I の方へちょっと延長) ↓\sendMP{for n=0,1,2: xdraw(0.4pt) extLine(z.I,z0,0.1,0); endfor}\mptAngleMark[tick=0,arcdir=30]{z1}{z0}{z.I}%

角度マーク (等角記号付き)\mptAngleMark[tick=0,arcdir=30]{z.I}{z0}{z2}%角度マーク (等角記号付き)\mptPutAngleMark[tickpos={0.25,0.75}]{z2}{z1}{z0}{$\bullet$}% 等角マーク\mptPutAngleMark[tickpos={0.25,0.75}]{z0}{z2}{z1}{$\circ$}%

等角マーク\sendMP{xdraw(1pt) z0--z1--z2--cycle;%

三角形描画

xdraw(0.4pt) circle(z.I,asi(z.I,z1,z2));}%

内接円描画\mptZuLabel{(0,2h)}[tl]{内心}\end{MPpic}
図 28 のソース\begin{MPpic}<1cm>(3,2)
この \sendMP{} 内では，線のデフォルトの太さを 0.4pt に\sendMP[0.4pt]{%z0=(0,0); z1=(3w,0); z2=(2w,2h);% 3 頂点 z0,z1,z2 を設定
for n=0,1,2: draw z[n]--asi(z[n],z[(n+1)mod3],z[(n+2)mod3]); endfor}% 垂線↓ 直角マークを for 文で\sendMP{for n=0,1,2:}%\mptRightAngleMark{z[n]}{asi(z[n],z[(n+1)mod3],z[(n+2)mod3])}{z[(n+1)mod3]}
このように for 文は \sendMP をまたいで作用さられます\sendMP{endfor}%

ただし，このとき \sendMP に [0.4pt] などのオプションはつけられません%\sendMP{xdraw(1pt) z0--z1--z2--cycle;}%三角形描画

垂心 H を計算させて 3pt の大きさの点を打ち，ラベル「H」を書き込む%\mptPoint{z.H}[H][t]<0mm,-2.5mm>(3pt){suisin(z0,z1,z2)}\mptZuLabel{(0,2h)}[tl]{垂心}\end{MPpic}
図 29 のソース\begin{MPpic}<1cm>(3.2|0.3,3.3|0.2)(0,-1)
3 頂点 z0,z1,z2 を設定\sendMP{z0=(0,0); z1=(3w,0); z2=(2w,2h);}%外心 O を計算させて 3pt の大きさの点を打ち，ラベル「O」を書き込む%\mptPoint{z.O}[O][b]<0mm,1.5mm>(3pt){gaisin(z0,z1,z2)}\sendMP{for n=0,1,2:
draw extLine(z.O,(0.5[z[n],z[(n+1)mod3]]),0.2,0.2);}% 辺の垂直二等分線 (少し延長)\mptRightAngleMark{z.O}{asi(z.O,z[n],z[(n+1)mod3])}{z[(n+1)mod3]}% 直角マーク
3 行上の for 文は，\sendMP をまたいでここで終了\sendMP{endfor}%

二等分記号を辺 z0--z1 に\sendMP[0.4pt]{drawTick(z0--z1)(0.25,0.75)(0)(-2pt,2pt);%
drawTick(z1--z2)(0.25,0.75)(-1pt,1pt)(-2pt,2pt);}%

二等分記号を辺 z1--z2 に\mptLabel{0.25[z2,z0]}{$\circ$}%

二等分記号 (丸印) を辺 z2--z0 に\mptLabel{0.75[z2,z0]}{$\circ$}%

二等分記号 (丸印) を辺 z2--z0 に\sendMP{xdraw(1pt) z0--z1--z2--cycle; xdraw(0.4pt) circle(z.O,z0);}%\mptZuLabel{z.O+w*down}[t]{外心}\end{MPpic}

31

三角形, 外接円描画

図 30 のソース

\begin{MPpic}<1cm>(6,3)
3 頂点 z0,z1,z2 を設定\sendMP{z0=(0,0); z1=(3w,0); z2=(2w,2h);}%

傍心 N を計算させて 3pt の大きさの点を打ち，ラベル「N」を書き込む%\mptPoint{z.N}[N][tl]<1.5mm,0mm>(3pt){bousin(z0,z1,z2)}%↓角の 2 等分線 (z.N の方へちょっと延長)\sendMP[0.4pt]{for n=0,1,2: draw extLine(z.N,z[n],0.1,0); endfor}\mptAngleMark[tick=0,arcdir=30]{z1}{z0}{z.N}%

角度マーク (等角記号付き)\mptAngleMark[tick=0,arcdir=30]{z.N}{z0}{z2}%角度マーク (等角記号付き)\mptPutAngleMark[tickpos={0.25,0.75},markradius=5pt]{2[z0,z1]}{z1}{z2}{$\bullet$}% 等角マーク\mptPutAngleMark[tickpos={0.25,0.75},markradius=8pt]{z1}{z2}{2[z0,z2]}{$\circ$}%

等角マーク\sendMP{for n=1,2: xdraw(hasen()) z[n]--(2[z0,z[n]]); endfor % 外角を表現するため少し辺を延長
xdraw(1pt) z0--z1--z2--cycle;%

三角形を描画

xdraw(1pt) circle(z.N,asi(z.N,z1,z2));}%

傍接円描画\mptZuLabel{(0,2h)}[tl]{傍心}\end{MPpic}
y
3
2
×

×

1
−2

−1 O

1

2

3

4

5

6

7

x

図 32

−1
−2
図 31

−3
図 31 のソース\begin{MPpic}<9mm>(8|2,4|3)\sendMP{numeric r[]; path pth[];%z0=(3w,0); r0:=3w;r0,r1,... を numeric 値，pth0,pth1,... を path 値に

z1=(6w,2h); r1:=2w;%

2 円の中心と半径

pth0:=circle(z0,r0); pth1:=circle(z1,r1);% 2 円の定義 (pth0,pth1 と名付けた)% intersectionpoint は 2 つのパスの交点を求めてくれるコマンド
交点が複数あるときは最初に見つかったものを返す

z2=pth0 intersectionpoint pth1;%

z3=(reverse pth0) intersectionpoint (reverse pth1);%

したがってもうひとつの交点

for n=0,1: xdraw(1pt) pth[n]; endfor %2 円を描くxdraw(1pt) ExtLine(z2,z3);}%2 交点を結ぶ線分 (描画領域端まで延長)

はパスを逆方向にして探す\mptDrawTick{-2w step w until 7.01w}{-3h step h until 3.01h}% 座標軸の目盛x 軸と「x」というラベル\mptXaxis[tr]<0mm,-1mm>{$x$}%\mptYaxis[tr]<-1mm,0mm>{$y$}%y 軸と「y」というラベル\mptCoord(-2,0)(1,0){2}[t]<0mm,-1mm>{$\xcoord$}%x 軸の目盛の下の数\mptCoord(1,0)(1,0){7}[t]<0mm,-1mm>{$\xcoord$}%

上のつづき\mptCoord(0,-3)(0,1){3}[r]<-1mm,0mm>{$\ycoord$}%y 軸の目盛の下の数\mptCoord(0,1)(0,1){3}[r]<-1mm,0mm>{$\ycoord$}%

上のつづき\mptLabel{origin}[tr]<-1mm,-1mm>{O}%

原点に「O」というラベルを表示\mptZuLabel{(6.5w,-2.5h)}{交円}\end{MPpic}32

図 32 のソース

\begin{MPpic}<9mm>(5,4|1)(0,-1.5)
pth0,pth1,... を path 値に\sendMP{path pth[];%pth0:=circulararc((w,0),(2w,-2h),(2w,2h));%左に中心がある円弧

pth1:=circulararc((4w,0),(2.5w,2h),(2.5w,-2h));% 右に中心がある円弧
z0=pth0 intersectionpoint pth1;%

2 つの円弧の交点

z1=(reverse pth0) intersectionpoint pth1;%

もう 1 つの交点

for n=0,1: xdraw(hasen()) pth[n]; endfor %先程の円弧を点線で描画

xdraw(1pt) Hline(0)()();%

横線 (領域の端から端まで)

xdraw(1pt) ExtLine(z0,z1);}%

円弧の 2 交点を結ぶ線分 (領域端まで延長)\mptRightAngleMark{z1}{1/2[z0,z1]}{1/2[z0,z1]+right}%

直角マーク\multimptput(1,0)(3,0){2}{$\times$}%

円弧の中心にバツ印\mptZuLabel{(4w,-2h)}{垂線}\end{MPpic}
y

x

O
図 33
図 33 のソース↓グリッドを描画\begin{MPpic}<8mm>(8|2,4|2)%\mptDrawGrid[linetype=dashed hasen()]{-2w step w until 8.01w}{-2h step h until 4.01h}
原点に「O」というラベルを表示\mptLabel{origin}[tr]<-1mm,-1mm>{O}%\mptXaxis[tr]<0mm,-1mm>{$x$}%

x 軸と「x」というラベル\mptYaxis[tr]<-1mm,0mm>{$y$}%y 軸と「y」というラベル\sendMP{z0=(3w,0); z1=(6w,2h); numeric r[]; r0=w; r1=2w;% 2 円の中心と半径z2=(-r0/(r1-r0))[z0,z1];%

共通外接線の交点

xdraw(1pt) ClipPATH(Tang.l(z2,z1,r1));%z2 から見て左の接線描画 (はみ出しカット)

xdraw(1pt) ClipPATH(Tang.r(z2,z1,r1));%z2 から見て右の接線描画 (はみ出しカット)

for n=0,1: xdraw(1pt) circle(z[n],r[n]); endfor}% 2 円を描画
\mptZuLabel{(4w,-2h)}[b]<0mm,1mm>{円接線 1}\end{MPpic}

図 35
図 34

33

図 34 のソース

\begin{MPpic}<7.5mm>(11|1,5.5|3)(0,-1.5)\sendMP{z0=(1w,0); z1=(6w,0h); numeric r[]; r0=w; r1=3w;% 2 円の中心と半径
一気に 2 円と (可能なすべての) 接線を描く (枠有)drawAllTang(z0,z1,r0,r1,-1.2);}%\mptZuLabel{(2w,-3h)}{円接線 2}\end{MPpic}
図 35 のソース\begin{MPpic}<7.5mm>(8,5|2)(1,0)
接線や円の線の太さや\sendMP{TangPenSize:=1pt; CircPenSize:=1pt;%

TangType:="dashed hasen()"; CircType:="withcolor red";% 色を変更
z0=(3w,0); z1=(6w,2h); numeric r[]; r0=w; r1=2w;%
drawAllTang(z0,z1,r0,r1,0);}%2 円の中心と半径

一気に 2 円と (可能なすべての) 接線を描く (枠・クリップ無)\mptZuLabel{(5w,-h)}{円接線 3}\end{MPpic}
H
2 円の半径を r , R , 中心間距離を d とする．
このとき，共通内接線の長さは√
T1 T2 = C1 H = d2 − (R + r)2

T2
C1

っていう図です．

C2
d

T1
図 36
図 36 のソース\begin{MPpic}<8mm>(11|1,3|3)
2 円の半径中心 z.C1 の定義とラベル\sendMP{numeric r[]; r1=w; r2=2w;}%\mptPoint{z.C1}[C$_1$][br]<0mm,0.5mm>{(w,0)}%\mptPoint{z.C2}[C$_2$][tl]<0.5mm,-0.5mm>{(7w,0)}%中心 z.C2 の定義とラベル

z.C1 から補助円に引いた接線の接点 z.H の定義とラベル%\mptPoint{z.H}[H][b]<-0.5mm,0.5mm>{TangPoint.l(z.C1,z.C2,r1+r2)}\mptPoint{z.T2}[T$_2$][l]<2.5mm,-1.5mm>{(r2/(r1+r2))[z.C2,z.H]}% 半径比を用い z.T2 の位置を求める\mptPoint{z.T1}[T$_1$][tl]<0.5mm,-0.5mm>{z.C1+z.T2-z.H}%

z.T2 をもとに z.T1 を求める

\sendMP{for n=1,2: xdraw(1pt) circle(z.C[n],r[n]); endfor %もとの 2 円描画

xdraw(hasen()) circle(z.C2,r1+r2);%

補助円描画

draw z.C1--z.C2--z.H--z.C1--z.T1--z.T2;}%

線分を描画\mptRightAngleMark{z.C2}{z.T2}{z.T1}%

直角マーク\mptRightAngleMark{z.C2}{z.H}{z.C1}%

直角マーク\mptRightAngleMark{z.C1}{z.T1}{z.T2}%

直角マーク

2 中心を円弧で結び中央に「d」というラベルを\mptFromTo[label={$d$}]{z.C2}{z.C1}%\mptZuLabel{(3w,-2h)}{円接線 4}\end{MPpic}

34

B
A
−
→
b

−
→
a

A
−
→
a

θ
O

図 37

A

O

図 38

−
→
a

H

−
→
v

H

O

−
→
v
図 39

図 37 のソース\begin{MPpic}<15mm>(3.5|0.5,2.5|0.5)\mptPoint{z.O}[O][tr]<-1mm,0mm>{origin}%

点 z.O を定義し同時にラベル「O」を図に書き込む\mptPoint{z.A}[A][l]<1mm,0mm>{(3w,h)}%

点 z.A も同様

\mptPoint{z.B}[B][b]<0mm,1mm>{(w,2h)}%

点 z.B も同様

\mptLabel{1/2[z.O,z.A]}[t]<0mm,-1mm>{\vect{a}}%z.O と z.A の中点に「ベクトル a」と表示\mptLabel{1/2[z.O,z.B]}[br]<-1mm,1mm>{\vect{b}}% z.O と z.B の中点に「ベクトル b」と表示\mptAngleMark[label=$\theta$,labeldist=8pt,pensize=0.4pt]{z.A}{z.O}{z.B}% 角度マーク
折れ線に両向き矢印\sendMP{xdraw(1pt,"<->") z.B--z.O--z.A;%

z.A と z.B を細線で結ぶ

xdraw(0.4pt) z.A--z.B;}%\mptZuLabel{(3w,0)}{内積}\end{MPpic}
図 38 のソース\begin{MPpic}<12mm>(3.5|0.5,2.5|1)\mptPoint{z.O}[O][t]<0mm,-1mm>{origin}%

点 z.O を定義し同時にラベル「O」を図に書き込む\mptPoint{z.A}[A][l]<1mm,0mm>{(2w,2h)}%

点 z.A も同様

\mptPoint{z.B}[\vect{v}][l]<1mm,0mm>{(3w,0)}%点 z.B を定義し同時に「ベクトル v」と書き込む\mptPoint{z.H}[H][t]<0mm,-1mm>{asi(z.A,z.O,z.B)}% 垂線の足 z.H を定義しラベル「H」も図に\mptLabel{1/2[z.O,z.A]}[br]<0mm,1mm>{\vect{a}}%z.O と z.A の中点に「ベクトル a」と表示\mptRightAngleMark[pensize=0.4pt]{z.A}{z.H}{z.O}% 直角マーク
折れ線に両向き矢印\sendMP{xdraw(1pt,"<->") z.B--z.O--z.A;%

z.A と z.H を破線で結ぶ

xdraw(0.4pt,hasen()) z.A--z.H;}%\mptZuLabel{(w,-0.5h)}{正射影 1}\end{MPpic}
図 39 のソース\begin{MPpic}<12mm>(3.5|0.5,2.5|1)\mptPoint{z.O}[O][t]<0mm,-1mm>{(w,0)}%点 z.O を定義し同時にラベル「O」を図に書き込む\mptPoint{z.A}[A][r]<-1mm,0mm>{(0,2h)}%

点 z.A も同様

\mptPoint{z.B}[\vect{v}][l]<1mm,0mm>{(3w,0)}%点 z.B を定義し同時に「ベクトル v」と書き込む\mptPoint{z.H}[H][t]<0mm,-1mm>{asi(z.A,z.O,z.B)}% 垂線の足 z.H を定義しラベル「H」も図に\mptLabel{0.5[z.O,z.A]}[bl]<0mm,1mm>{\vect{a}}%z.O と z.A の中点に「ベクトル a」と表示\mptRightAngleMark[pensize=0.4pt]{z.A}{z.H}{z.O}% 直角マーク%\mptDrawPath を使うと，矢印の形状などをかなり細かく設定できます (↓は矢の広がりを大きくした)\mptDrawPath[pensize=1pt,arrowtype=<->,arrowangle=70]{z.B--z.O--z.A}% 折れ線に両向き矢印\sendMP{xdraw(0.4pt,tensen()) z.A--z.H--z.O;}%\mptZuLabel{(2w,-0.5h)}{正射影 2}\end{MPpic}
35

補助線を点線で

矢印の端点にはいろいろな形が指定できます．具体的には < , > , | , o , * , >| , |< が使えます．( o は半角小文字の
オーです．>| は半角の不等号 > と縦線 | を組み合わせています．|< も同様です．) 実際の形は，下の例を参照して下さい．( おおよそ記号から想像できる形だと思います．)
図 40 のソース\begin{MPpic}<1cm>(0,0.3|0.3)(3.8,2.8)

図 40\sendMP{xdraw("|<->|") ((0,0)--(1,1))scaled w;
xdraw("o->",red) ((2,0)--(2,2))scaled w;
xdraw("*-|",blue) ((3,0)--(0,1))scaled w;}\mptZuLabel{(0,2w)}[tl]{矢印}\end{MPpic}rY
P( a , b )

b

B(β)

円 (球面)

θ
図 41

C

−r

O

a

X
r

⃝
r
A(α)

r
θ
P

H

Q

直線 (平面)

図 42

−r

C(γ)

⃝
1

図 43

図 41 のソース\begin{MPpic}<20mm>(1.5|1.5,2)(0,-1)\mptPoint{z.C}[C][l]<1mm,0mm>(2pt){origin}% 点 z.C を定義し，2pt の点を打ち，ラベル「C」も書き込む\mptPoint{z.P}[P][tr]<0mm,-1mm>{w*dir(-135)}%

点 z.P を定義し同時にラベル「P」を図に\mptPoint{z.Q}[Q][tl]<0mm,-1mm>{w*dir(-45)}%

点 z.Q も同様

\mptPoint{z.H}[H][tl]<0mm,-1mm>{asi(z.C,z.P,z.Q)}% 点 z.H も同様 (z.H は垂線の足)\mptLabel{1/2[z.C,z.P]}[br]<-1mm,1mm>{$r$}%z.C と z.P の中点に「r」と表示\mptLabel{w*dir30}[l][dist=6mm*dir10,arcdir=-20]<1mm,0mm>{円 (球面)}% この 2 行はラベルと配置点\mptLabel{1.2[z.P,z.Q]}[l][dist=6mm*dir-40,arcdir=20]<1mm,0mm>{直線 (平面)}% を線で結んでいる\mptRightAngleMark[pensize=0.4pt]{z.C}{z.H}{z.P}%

直角マーク\sendMP{xdraw(1pt) circle(z.C,z.P); xdraw(1pt) extLine(z.P,z.Q,0.5,0.5);%

円と直線を描画
補助線を描画

xdraw(0.4pt) z.P--z.C--z.H;}%\mptZuLabel{(w,0)}[l]<1mm,0mm>{割線}\end{MPpic}
図 42 のソース\begin{MPpic}<15mm>(1.5|1.3,3)(0,-1.4)%\sendMP{SetArea(-1.2,1.4)(-1.2,1.4);}%

確保領域 -1.3 ≦ x ≦ 1.5, -1.4 ≦ y ≦ 1.6
描画領域 (少し小さく) -1.2 ≦ x ≦ 1.4, -1.2 ≦ y ≦ 1.4\mptPoint{z.O}[O][tr]<-1mm,-1mm>{origin}% 点 z.O を定義し同時にラベル「O」を図に書き込む\mptPoint{z.P}[P( $a$ , $b$ )][bl](3pt){w*dir50}%

点 z.P も同様

\mptPoint{z.A}[$a$][t]<0mm,-1mm>{(x.P,0)}%点 z.A も同様

\mptPoint{z.B}[$b$][r]<-1mm,0mm>{(0,y.P)}%

点 z.B も同様

\mptAngleMark[label=$\theta$,pensize=0.4pt,arrowtype=->,labeldist=6pt,arrowdiradj=-10]{z.A}{z.O}{z.P}% 角度マーク\mptXaxis[br]<0mm,1.5mm>{$X$} \mptYaxis[tl]<1mm,0mm>{$Y$}%

描画領域いっぱいに X 軸,Y 軸\sendMP{xdraw(1pt) circle(z.O,z.P); draw z.O--z.P;%

円と動径を描く

xdraw(0.4pt,hasen()) Pline(z.P);}%

補助線 (破線)\mptZuLabel{(-1.2w,-1.2h)}[bl]{三角関数}\finishMP % ここで一旦描画を終わって今回の例では \mptput を使ってみる (\mptLabel に比べ下地の消去\mptput(1,0)[tl]<1mm,-1mm>{$r$} \mptput(-1,0)[tr]<-1mm,-1mm>{$-r$}% などが無い分シンプルなマクロ)\mptput(0,1)[br]<-1mm,1mm>{$r$} \mptput(0,-1)[tr]<-1mm,-1mm>{$-r$}% 座標に単位 ( や w , h ) をつけないことに注意\end{MPpic}%36

図 43 のソース
複素数平面・回転と拡大縮小 --- ってイメージの図\begin{MPpic}<10mm>(4.5|0.5,4)(0,-0.5)%\mptPoint{z.A}[A($\alpha$)][l]<1mm,0mm>{3w*dir20}% 点 z.A を定義し同時にラベルも\mptPoint{z.B}[B($\beta$)][l]<1mm,0mm>{3w*dir70}%

点 z.B も同様

\mptPoint{z.C}[C($\gamma$)][t]<0mm,-1mm>{origin}%

点 z.C も同様

\MARU はこのマニュアル用に定義したマクロ (丸付き文字を出力)%\mptFromTo[label=\MARU{1},labeldist=5pt,fillcolor=none]{z.A}{z.C}%

矢印の長さの比\mptFromTo[label=\MARU{$r$},labeldist=6pt,fillcolor=none]{z.C}{z.B}% 矢印の長さの比\mptAngleMark[label=$\theta$,pensize=0.4pt,arrowtype=->,角度マーク

labeldist=6pt,arrowdiradj=-10]{z.A}{z.C}{z.B}%

折れ線に両向き矢印\mptDrawPath[pensize=1pt,arrowtype=<->]{z.A--z.C--z.B}%\mptZuLabel{(3w,-0.5h)}[b]{複素数}\end{MPpic}

A

B

U

図 44 のソース\begin{MPpic}<0.8mm>(43|2,0)(0,15)\sendMP{path pth[];pth0:=(origin--40right--(40,30)--30up--cycle)scaled w;%全体集合の枠

pth1:=circle(w*(10,15),9w); pth2:=circle(w*(25,15),12w);%

集合 A,B の円

図 44

和集合 A ∪ B

pth3:=buildcycle(subpath(0,4)of pth1,subpath(2,6)of pth2);% 斜線を引く部分 (和集合) の境界線
% 注 : buildcycle は「囲む部分」の周を形成する MetaPost のマクロ%「囲む部分」が複数あるときは，目的の部分がうまく得られるように subpath で始点をずらす

xfill(2pt*dir45) pth3;%

和集合に斜線を引く

for n=0upto2: draw pth[n]; endfor}%

枠と円をまとめて描く\mptLabel{point2.2of pth0}{$U$} \mptLabel{point1of pth1}{$A$} \mptLabel{point1of pth2}{$B$}\mptZuLabel[label={和集合 $A \cup B$}]{(20w,-3w)}{和集合}\end{MPpic}
円，円弧，扇形の ⟨ パス ⟩ は METAPOST マクロでも生成できますが \mptCircPath という TEX マクロでも生成でき
ます．

C

B

図 45

D

E

A

F

37

図 45 のソース

\begin{MPpic}<18mm>(3|3,3|3)%

各図形の中心を設定しラベルを配置 (ついでに点を打つ---C,D,F の点は上書きで消えていることにも注意)\mptPoint{z.A}[A][r] (2pt){2w*dir0;}\mptPoint{z.B}[B][tr](2pt){2w*dir60;}\mptPoint{z.C}[C][tl](2pt){2w*dir120;} \mptPoint{z.D}[D][l] (2pt){2w*dir180;}\mptPoint{z.E}[E][bl](2pt){2w*dir240;} \mptPoint{z.F}[F][br](2pt){2w*dir300;}
円弧 (中心 A) オプションなしは円弧\mptCircPath{ptha}{z.A}{w}{90}%\mptDrawPath[pensize=1pt]{ptha}\mptCircPath{pthb}[a]{z.B}{z.B+w*dir50}{z.B+w*dir140}% 円弧 (中心 B) オプション [a] は円弧\mptDrawPath[pensize=1pt]{pthb}
円\mptCircPath{pthc}[c]{z.C}{w}{}%(中心 C) オプション [c] は円\mptDrawPath[pensize=1pt,filltype=solid,fillcolor=red]{pthc}
円\mptCircPath{pthd}[c]{z.D}{(-w,0)}{}%(中心 D) オプション [c] は円\mptDrawPath[pensize=1pt,filltype=solid,fillcolor=Yellow]{pthd}
弓形 (中心 E) オプション [b] は弓形\mptCircPath{pthe}[b]{z.E}{w}{-90}%\mptDrawPath[pensize=1pt,filltype=solid,fillcolor=green]{pthe}\mptCircPath{pthf}[f]{z.F}{z.F+w*dir10}{240}%

扇形 (中心 F) オプション [f] は扇形\mptDrawPath[pensize=1pt,filltype=solid,fillcolor=blue]{pthf}\mptZuLabel{(0,0)}{弧}\end{MPpic}
ちなみに，MEPOTEX 所収の METAPOST マクロを使うなら (∗) の 12 行はこんな感じになります．

\sendMP{xdraw(1pt) circulararc(z.A,w,90);
xdraw(1pt) circulararc(z.B,z.B+w*dir50,z.B+w*dir140);
xfilldraw(red)(1pt)

circle(z.C,w);

xfilldraw(Yellow)(1pt) circle(z.D,(-w,0));

4.2

xfilldraw(green)(1pt)

circulararc(z.E,w,-90)--cycle;

xfilldraw(blue)(1pt)

circulararc(z.F,z.F+w*dir10,240)--z.F--cycle;}

塗りつぶし，グラデーション

図 46

38



















































(∗)

図 46 のソース
\begin{MPpic}<9.5mm>(15,9)\sendMP{for t=0 step 1 until 10:%
if odd t:%

縦方向 1 ずつ
縦座標 t が奇数のとき

for s=1 step 2 until 15:% 横方向 2 おきに円を描く (黄と青交互に)
xfill(if odd ((s+1)/2):Yellow else: blue fi) circle((s*w,t*h),w);
endforelse:%

縦座標 t が偶数のとき

for s=0 step 2 until 15:% 横方向 2 おきに (上とは 1 ずれた) 円を描く (赤と緑交互に)
xfill(if odd (s/2):green else: red fi) circle((s*w,t*h),w);
endforfi
endfor %塗りつぶしが上書きであることに注意
描いたのは円だが，現れる図形はイチョウの葉のような形}%

領域外を削除\mptClip %\mptZuLabel{(15w,0)}[bl]<1mm,0mm>{模様}\end{MPpic}

図 47
図 48
図 47 は円周方向に色相，半径方向に彩度を変化させたものです ( 輝度は 1 に固定 )．
図 48 は円周方向に色相，半径方向に輝度を変化させたものです ( 彩度は 1 に固定 )．
図 47 のソース\begin{MPpic}<3cm>(1|1,1|1.2)\sendMP{for r=w step (-w/11) until (w/100):% 半径方向繰り返し
for n=0 step 5 until 359:%

円周方向繰り返し

xfill(hsb(n/360,r/w,1)) circulararc(origin,r*dir(92.5-n),5)--origin--cycle;
endfor %扇形 --- 次第に半径を小さくして上書き

endfor}\mptZuLabel{(0,-1.2h)}[b]{色見本 1}\end{MPpic}
図 48 のソース\begin{MPpic}<3cm>(1|1,1|1.2)\sendMP{for r=w step (-w/11) until (w/100):% 半径方向繰り返し
for n=0 step 5 until 359:%

円周方向繰り返し

xfill(hsb(n/360,1,r/w)) circulararc((0,0),r*dir(92.5-n),5)--origin--cycle;
endfor %扇形 --- 次第に半径を小さくして上書き

endfor}\mptZuLabel{(0,-1.2h)}[b]{色見本 2}\end{MPpic}39

色の変化をもっと細かくとれば，グラデーションに見えます．これを利用したのが，\mptDrawPath のオプション機能
である「グラデーションによる塗りつぶし」です．
図 49 のソース\begin{MPpic}<4cm>(1,0)(0,1)

z1=(0.45w,0.55h);%点を指定

z0v1=z0+0.5w*up; z1v1=z1+0.05w*up;%

点を指定\sendMP{z0=(0.5w,0.5h);

p は大きい星 (輪郭) q は小さい星 (グラデーションの焦点)

path p,q;%

p:=StarPath(z0)(5); q:=StarPath(z1)(5);}% p, q の定義\mptDrawPath[linetype=none,filltype=grad,
gradcolor={hsb(0.15,1,0.8),hsb(0.15,0.1,1)},graddir=q]{p}図 49\mptZuLabel{(0.5w,-0.1h)}[b]{グラデーション}\end{MPpic}

参考までに，\mptDrawPath のグラデーション塗りでは，内部で METAPOST のマクロである interpath を使っています．もし，\mptDrawPath を使わず直接 METAPOST で命令を書くなら，次のようになります．

\sendMP{for t=0 step 0.02 until 1.01:
xfill(hsb(0.15,1-0.9t,0.8+0.2t)) interpath (t,p,q);
endfor}「グラデーションによる塗りつぶし」では，いろいろと細かな設定が可能ですので，以下その実例を挙げてみます．なお，以下の例で使われている図形は

pth:=((1,0)..(2,1)..(1,2)..(0,1.5)..(0.3,1)..(0,0.5)..cycle) scaled w;という path 値を平行移動して使っています．また，補助として，以下の pair 値 po , path 値 ptho を用いています．

po:=(10.2w,w);

graddir=0

graddir=45

ptho:=circle((13.2w,w),0.3w);

graddir=-45

graddir=po

graddir=ptho

gradcolor={Red,Yellow} gradcolor={Blue,Yellow} gradcolor={Blue,Yellow} gradcolor={Blue,Yellow}
gradtype=rgb
gradtype=hsb
gradtype=revhsb

sqrt tgradfunction=tt*tt*t*(3-2t)

t*(4t*t-6t+3)

1

1

1

1

1

f (t)

f (t)

f (t)

f (t)

f (t)

0

t

1

0

t

1

0

t
図 50

40

1

0

t

1

0

t

1

図 50 のソース

\begin{MPpic}<11mm>(15.2|0.8,2.3|10.5)\mptDrawPath[filltype=grad,graddir=0]{pth}\mptDrawPath[filltype=grad,graddir=45]{pth shifted(3w,0)}\mptDrawPath[filltype=grad,graddir=-45] {pth shifted(6w,0)}\mptDrawPath[filltype=grad,graddir=po]{pth shifted(9w,0)}\mptDrawPath[filltype=grad,graddir=ptho]{pth shifted(12w,0)}\mptLabel{(w,0)}[t]<0mm,-2mm>{\texttt{graddir=0}}\mptLabel{(4w,0)} [t]<0mm,-2mm>{\texttt{graddir=45}}\mptLabel{(7w,0)} [t]<0mm,-2mm>{\texttt{graddir=-45}}\mptLabel{(10w,0)}[t]<0mm,-2mm>{\texttt{graddir=po}}\mptLabel{(13w,0)}[t]<0mm,-2mm>{\texttt{graddir=ptho}}\mptDrawPath[gradcolor={red,Yellow}] {pth shifted(0,-3w)}\mptDrawPath[gradcolor={blue,Yellow}]{pth shifted(4w,-3w)}\mptDrawPath[gradcolor={blue,Yellow},gradtype=hsb]{pth shifted(8w,-3w)}\mptDrawPath[gradcolor={blue,Yellow},gradtype=revhsb]{pth shifted(12w,-3w)}\mptLabel{(w,-3w)}[t]<0mm,-2mm>{\texttt{gradcolor=\{Red,Yellow\}}}\mptLabel{(5w,-3w)} [t]<0mm,-2mm>{\texttt{gradcolor=\{Blue,Yellow\}}}\mptLabel{(9w,-3w)} [t]<0mm,-2mm>{\texttt{gradcolor=\{Blue,Yellow\}}}\mptLabel{(13w,-3w)}[t]<0mm,-2mm>{\texttt{gradcolor=\{Blue,Yellow\}}}\mptLabel{(5w,-3w)} [t]<0mm,-6mm>{\texttt{gradtype=rgb}}\mptLabel{(9w,-3w)} [t]<0mm,-6mm>{\texttt{gradtype=hsb}}\mptLabel{(13w,-3w)}[t]<0mm,-6mm>{\texttt{gradtype=revhsb}}\mptDrawPath[filltype=grad,gradfunction=t]{pth shifted(0w,-6.5w)}\mptDrawPath[filltype=grad,gradfunction={sqrt t}]{pth shifted(3w,-6.5w)}\mptDrawPath[filltype=grad,gradfunction={t*t}]{pth shifted(6w,-6.5w)}\mptDrawPath[filltype=grad,gradfunction={t*t*(3-2t)}]{pth shifted(9w,-6.5w)}\mptDrawPath[filltype=grad,gradfunction={t*(4t*t-6t+3)}]{pth shifted(12w,-6.5w)}\mptLabel{(w,-6.5w)}[t]<0mm,-2mm>{\texttt{gradfunction=t}}\mptLabel{(4w,-6.5w)} [t]<0mm,-2mm>{\texttt{sqrt t}}\mptLabel{(7w,-6.5w)} [t]<0mm,-2mm>{\texttt{t*t}}\mptLabel{(10w,-6.5w)}[t]<0mm,-2mm>{\texttt{t*t*(3-2t)}}\mptLabel{(13w,-6.5w)}[t]<0mm,-2mm>{\texttt{t*(4t*t-6t+3)}}\sendMP{def gradfun(expr org)(text tt) = % この図のためのマクロ定義
draw (origin--right--right+up--up--cycle) scaled 2w shifted org;
draw gkansu(tt)(0,1,50) scaled 2w shifted org;
SaveLabel(org+w*right,"[t]<0mm,-1mm>","$t$");SaveLabel(org+w*up,"[r]<-1mm,0mm>","$f(t)$");
SaveLabel(org,"[tr]<-1mm,-1mm>","0");SaveLabel(org+2w*right,"[t]<0mm,-1mm>","1");SaveLabel(org+2w*up,"[r]<-1mm,0mm>","1");enddef; %gradfun((0,-9.5w))(t);マクロ定義終わり

gradfun((3w,-9.5w))(sqrt t);

gradfun((6w,-9.5w))(t*t); gradfun((9w,-9.5w))(t*t*(3-2t));
gradfun((12w,-9.5w))(t*(4t*t-6t+3));}\mptZuLabel{(7w,-10.5w)}[b]{グラデーションパラメータ}\end{MPpic}

41

図 51 のソース
\begin{MPpic}<2cm>(1|1,0)(0,1)

色は赤です．

\sendMP{z0=(0,0); z1=(-0.3w,-0.6h); z2=(0,0.5h); z3=(0,0.9h);
xfilldraw(red)(1pt) circle(z0,w);}\mptFukidasi[filltype=grad,gradcolor={hsb(0.6,0.5,1),white}]{z0}{z1}{35mm}{この円の中心は ( 0 , 0 ) で, 半径は 2cm です．}
\mptFukidasi[Fshape=round]{z2}{z3}{2cm}{色は赤です．}

この円の中心は ( 0 , 0 )\mptZuLabel{(0,-h)}[t]<0mm,-3mm>{ふきだし}

で, 半径は 2cm です．

\end{MPpic}
図 51

4.3

立体図形

図 52

L

図 52 のソース\begin{MPpic}<7.5mm>(22|0.8,10.5|1.5)\sendMP{z0=(2w,5h); z1=(8w,5h); z2=(14w,5h); z3=(20w,5h);%

上 4 つの下底面の中心z4v=(2w,4h); z5v=(8w,4h); z6t25=(14w,4h); z7v=(20w,4h);}% 下 4 つの上底面の中心や端点，頂点\sendMP{SetPolyFrame; SetProjDir(20,-90)(blue);% 枠形式を指定，射影方向も指定
mptcolumn(z0)(2w,5h,-50);%

円柱 --- 引数は順に (中心)(半径, 高さ, 角数) これが基本

mptcolumn(z1)(2w,5h,5)10;%

角柱 --- 引数は基本に 傾斜角 を追加

SetPolySolid; %塗り形式を指定

mptcone(z2)(2w,5h,-50)10;%

円錐 --- 引数は上と同じ

mptColumnCone(z3)((2w,w),5h,7)(0,0);% 角錐台 --- 引数は基本に (緯度, 経度) を追加
mptColumnCone(z4)((2w,0),5h,7)(0,10)10,-10;}% 角錐 --- 上に 傾斜角, 傾斜方向 を追加\mptFromTo[label=$L$]{z4b3}{z4v}%角錐の母線に弧をつけてみた (特に意味無し ^_^;;)\sendMP{SetPolyFrame;%

再び枠形式

mptcone(z5)(2w,5h,-50)0,0,0.6,20;%

円錐 --- 基本に 傾斜角, 傾斜方向, 最高点, 勾配

mptColumnCone(z6)(2w,2sqrt3*h,-60)(-60,0)0,0,1,60;%

円柱 --- 基本に (緯度, 経度) 傾斜角, 傾斜方向, 最高点, 勾配

draw z6b15--z6b45;%

円柱の底面の直径を描く

SetProjDir(45,-90)(blue);%

射影方向を変更 --- 俯角を 45 度に

mptcone(z7)(2w,5h,-50)0,0,0.6,50,60;}%円錐 --- 基本に 傾斜角, 傾斜方向, 最高点, 勾配, 向き\mptZuLabel{(10.5w,4h)}{錐と柱}\end{MPpic}
42

1v1

3v4
3v5

1v5

1v6

1v4
1v3

1v2

1v10
1v9

3v9
3v10
3v14

1v11

3v8
3v6
3v15

3v13

1v7

1v8

3v3
3v1 3v2
3v7
3v11
3v12

3v19 3v20 3v16
3v17
3v18

1v12
図 53

図 53 のソース\begin{MPpic}<20mm>(7.8|1,1|3.5)(0,0)
射影方向を指定\sendMP{SetProjDir(10,30)(blue);%for n=0upto3: z[n]=z[n+4]+2.5w*up=n*2.2w*right; endfor % 中心を設定
SetPolySolid; icosahedron(z0)(-w);%

塗りタイプで正二十面体

SetPolyFrame; icosahedron(z1)(-w);%

枠タイプで正二十面体

SetPolySolid; dodecahedron(z2)(w);%

塗りタイプで正十二面体

SetPolyFrame; dodecahedron(z3)(w);%

枠タイプで正十二面体

SetPolySolid; octahedron(z4)(w);

以下塗りタイプ，正八面体%

Hexahedron(z5)(w)(40,0);%

正六面体，ちょっと回転

tetrahedron(z6)(1.2w);%

正四面体

soccer(z7)(0.8w);%

サッカーボール

dotLabels("[t]")(1v1 for n=1upto12: ,1v[n] endfor);%

枠の正二十面体の頂点に番号

dotLabels("[t]")(3v1 for n=1upto20: ,3v[n] endfor);}%

枠の正十二面体の頂点に番号\mptZuLabel{0.5[z2,z5]}{正多面体}\end{MPpic}√
正四面体は底面 ( の外接円 ) の半径と高さの比が 1 : 2 の正三角錐，正六面体 ( 立方体 ) は底面 ( の外接円 ) の半√径と高さの比が 1 : 2 の正四角柱として描くこともできます．ただし，mptColumnCone による角柱・角錐の「中心」は底面の中心，正多面体マクロの「中心」は立体の中心ですのでご注意下さい．
もちろん，4 頂点の空間座標を指定して，一般の四面体を ( 手間さえ惜しまなければもっと面数の多い多面体も ) 描
くこともできます．次の例では 4 頂点を指定し，さらに，交差するように見えるねじれの位置にある 2 辺について，手前の辺で奥の辺を切っています．ちなみにこれは，奥の辺を引いた後「手前の線を太い白線∗53 で書く」「手前の線を本来の太さで書く」の 2 つの操作をまとめてやってくれる odraw という命令を使っています．

∗53 正確には background 色の線です．background は通常 white になっているので，結果的に白線になるわけです．background が別の色に設定されていれば当然その色になります．

43

図 54

A

図 55

B

図 54 のソース

A

B

D
C

D
C

\begin{MPpic}<8mm>(2.6|2.4,3.2|1)
射影方向指定\sendMP{SetProjDir(20,110)(blue);}%\mptPoint{z.A}[A][b]<0mm,0.5mm>{proj(rdh(0,0,3w))}% ここからの 4 行は頂点の指定\mptPoint{z.B}[B][r]<-0.5mm,0.5mm>{proj(rdh(2w,0,0))}\mptPoint{z.C}[C][t]<0mm,-0.5mm>{proj(rdh(2w,130,0))}\mptPoint{z.D}[D][l]<0.5mm,0mm>{proj(rdh(2w,200,0))}
奥の辺 BD を細線で\sendMP{xdraw(0.4pt) z.B--z.D;%
xdraw(0.8pt) z.A--z.B--z.C--z.D--cycle;%

辺 AB,BC,CD,DA

odraw(0.1,0.1)(0.8pt) z.A--z.C;}%

辺 BD を切りながら辺 AC\mptZuLabel{(-2.2w,3.2h)}[tl]{ねじれ 1}%

ちなみに右側の図は odraw の前に background:=red;\end{MPpic}%を入れて「太い白線」を赤線に変え目立たせたもの

図 56 のソース

P

図 56\begin{MPpic}<7mm>(5|0.5,0)(0,4)
射影方向指定\sendMP{SetProjDir(30,-20)(blue);%
SetTetra(c)(4w,5w,6w,8w,7w,6w);}%四面体の頂点設定\mptPoint{z.P}[P][b]<0mm,0.5mm>{proj(c0)}%各頂点の射影点に名前をつけて\mptPoint{z.A}[A][r]<-0.5mm,0mm>{proj(c1)}%\mptPoint{z.B}[B][t]<0mm,-0.5mm>{proj(c2)}%

ラベルを書く8
6
7A5\mptPoint{z.C}[C][l]<0.5mm,0mm>{proj(c3)}%←奥の辺と↓その長さ\sendMP{xdraw(0.8pt,hasen(1.5)) z.A--z.C;}%C

6
4\mptFromTo[label=5,arcdir=20,linetype=dashed hasen(),labelpos=0.4]{z.A}{z.C}\mptFromTo[pensize=3pt,linecolor=background,arcdir=20]{z.B}{z.P}% 奥の辺を切る

B

以下 3 行は辺の長さを表示\mptFromTo[label=4,arcdir=20]{z.C}{z.B}%\mptFromTo[label=6,arcdir=20]{z.B}{z.A} \mptFromTo[label=8,arcdir=20]{z.A}{z.P}\mptFromTo[label=7,arcdir=20]{z.B}{z.P} \mptFromTo[label=6,arcdir=20]{z.P}{z.C}
辺 (奥の線を切る)\sendMP{odraw(0,0.1)(0.8pt) z.P--z.B;%

xdraw(0.8pt) z.P--z.A--z.B--z.C--cycle;}% 残りの辺
\mptZuLabel{(w,4h)}[t]{四面体}\end{MPpic}
図 57 のソース\begin{MPpic}<20mm>(0,0)(1,0.7)\sendMP{SetProjDir(5,5)(blue); z0=origin;% 射影方向と中心を指定
SetPolyNone; icosahedron(z0)(w);%

描画なしで正二十面体の頂点を設定% ねじれの位置の線消しなど細かく制御するため直接辺を描いていく
xdraw(0.4pt,hasen()) z0v12--z0v11--z0v10--z0v5--z0v11--z0v4--z0v7--z0v11;
odraw()(0.4pt) z0v8--z0v9--z0v6--z0v2--z0v3--z0v8--z0v2--z0v9;
xdraw(0.4pt) z0v6--z0v10--z0v12--z0v9--z0v10;
xdraw(0.4pt) z0v3--z0v7--z0v12--z0v8--z0v7;
xdraw(0.8pt) z0v2--z0v3--z0v4--z0v5--z0v6--cycle;}% z0v6--z0v2--z0v3\mptZuLabel{z0v12}[t]<0mm,-1mm>{多面体容器}% 正二十面体の上部を切って作った容器\end{MPpic}
44

図 57

次のサンプルは，z 軸以外を北極と定めた相対的な緯度・経度の指定例です．
図 58

F

G

E
z

B

x
y

D

A

C
M

H

O
N

図 58 のソース\begin{MPpic}<25mm>(1.6|1.6,1.9|0.5)\sendMP{color n,u,v;

n は北極方向=上方向

n:=(1,1,2);%u:=RelDir(n)(0,30); v:=RelDir(n)(0,110);%u,v は水平方向

SetRelProjDir(12,75)(n);}%射影方向の設定
図中の点の定義とラベル表示\mptPoint{z.O}[O][r] <-1mm,-0.5mm> {proj(0,0,0)}%\mptPoint{z.A}[A][tl]<0.5mm,0mm>{proj(w,0,0)}\mptPoint{z.B}[B][l] <0.5mm,1mm>{proj(w,w,0)}\mptPoint{z.C}[C][tr]<0mm,-0.5mm>{proj(0,w,0)}\mptPoint{z.D}[D][tl]<0.5mm,-0.5mm>{proj(0,0,w)}\mptPoint{z.E}[E][l] <0.5mm,0mm>{proj(w,0,w)}\mptPoint{z.F}[F][b] <0mm,0.5mm>{proj(w,w,w)}\mptPoint{z.G}[G][r] <-0.5mm,0mm>{proj(0,w,w)}\mptPoint{z.H}[H][t] <0mm,-0.5mm>{proj Asi((w,0,0),black,u,v)}\mptPoint{z.M}[M][t] <0mm,-0.5mm>{proj Asi((0,w,0),black,u,v)}\mptPoint{z.N}[N][t] <0mm,-0.5mm>{proj Asi((0,0,w),black,u,v)}
水平面の描画\sendMP{xdraw(0.4pt) groundpath(black,u,v,2w,0);%
xdraw(0.4pt) z.A--z.B--z.C; xdraw(0.4pt) z.B--z.F;%

奥の細線

xdraw(background,3pt) extLine(z.O,z.D)(-0.1,0.5);%

z 軸の背景を切る

odraw(0.1,0.1)(0.8pt) z.A--z.O--z.C; odraw()(0.8pt) z.G--z.D--z.E;% 手前の太線 (背景切る)
xdraw(0.8pt) z.C--z.G--z.F--z.E--z.A; xdraw(0.8pt) z.O--z.D;}%
手前の太線 (背景横切らない)
座標軸\mptXTaxis|-0.2w==1.5w> [l]<0.5mm,0mm> {$x$}%\mptYTaxis|-0.15w==1.4w>[r]<-0.5mm,0mm>{$y$} \mptZTaxis|-0.2w==1.5w>[b]<0mm,0.5mm>{$z$}\sendMP{for p=z.A--z.H, z.C--z.M, z.D--z.N: odraw(0.1)() p; endfor}%

垂線 (背景切る)\mptRightAngleMark{z.A}{z.H}{z.H+right}%

垂直マーク\mptRightAngleMark{z.C}{z.M}{z.M+right} \mptRightAngleMark{z.D}{z.N}{z.N+right}\mptZuLabel{(1.6w,1.9h)}[tr]{立方体 1}\end{MPpic}\hfill\null
空間内の面に図形を描く簡便な方法として，まず平面上でc4図形を描き，これを空間内に配置し，射影する，という方法

c6があります．例えば右図では左の図形 ( 左下が原点 ) を，点c5

c5 を「原点」とする，法線ベクトル c4 の平面上に -c1 を

c7

上向きとして配置しています．なお，この図および次の図 58Oc2

は currentpicture 以外への描画の例にもなっています．

c1
平面の原点

45

図 59

c3

図 59 のソース

\begin{MPpic}<20mm>(4,0)(0,0.3)\sendMP{path p; color c[]; SetProjDir(3,1,2)(0,0,1)(w,w,0);%p:=(origin -- right -- right+up -- up -- cycle) scaled w;%

射影方向指定正方形
正方形と星の中心と，星形の頂点の 1 つ

z0=center p; z0v1=0.45w*up+z0;%c0=black; c1=w*red; c2=w*green; c4=w*blue;%

立方体の頂点 (空間での座標)

c3=c1+c2; c5=c1+c4; c6=c2+c4; c7=c1+c2+c4;
貼り付ける図を保存する temp という picture 値変数を設定

newpic(temp);%xfillpic(temp)(hsb(0.66,0.6,0.8)) p;%

temp に正方形を描く (塗る)drawpic(temp) p;%

temp に正方形を描く (枠)xfillpic(temp)(hsb(0.167,0.8,1)) StarPath(z0)(5);%temp に星を描く (塗る)draw temp;%

temp を紙面に描く

xfill(red)p ThreeDTrans(c1)(c4)(c1) shifted (3w*right);% 立方体手前の面
xfill(green) p ThreeDTrans(c2)(c4)(c3) shifted (3w*right);% 立方体横の面
draw temp ThreeDTrans(c4)(-c1)(c5) shifted (3w*right);}%\mptPoint{z.o}[平面の原点][tr]<-1mm,-1mm>(3pt){origin}%

立方体上面に temp 貼り付け
以下点の位置の注釈を図に\mptPoint{z1}[\texttt{c1}][tr]<-1mm,-1mm>(3pt){proj c1 shifted (3w*right)}\mptPoint{z2}[\texttt{c2}][l] <1mm,-1mm> (3pt){proj c2 shifted (3w*right)}\mptPoint{z3}[\texttt{c3}][t] <0mm,-1mm> (3pt){proj c3 shifted (3w*right)}\mptPoint{z4}[\texttt{c4}][b] <0mm,1mm>(3pt){proj c4 shifted (3w*right)}\mptPoint{z5}[\texttt{c5}][r] <-1mm,0mm> (3pt){proj c5 shifted (3w*right)}\mptPoint{z6}[\texttt{c6}][l] <1mm,0mm>(3pt){proj c6 shifted (3w*right)}\mptPoint{z7}[\texttt{c7}][l] <1mm,-1mm> (3pt){proj c7 shifted (3w*right)}\mptPoint{z8}[O][t] <1mm,-1mm>{proj c0 shifted (3w*right)}\sendMP{xdraw(tensen(0.5),"->") z8--z1; xdraw(tensen(0.5),"<->") z2--z8--z4;}% 座標軸\mptZuLabel{(1.5w,-0.25h)}{面配置}\end{MPpic}
次の例では，立体図形の射影，回転を試しています．左図がもとの立方体です．

z

下図はこの立方体を，左から順に x 軸，y 軸，z 軸，ベクトル (1,1,1) のまわりに 20◦ 回転したものです．下図上段が正射影による立体表現，下段が遠近法による立体表現です．立方体を描くためのマクロはすでにあるのですが，ここでは空間内の変形を実験するために，マクロ化する部分は「点の設定後描画する部分
だけ」に絞ってあります．

y
x

図 60

46

図 60 のソース

\begin{MPpic}<1cm>(13|2,6|6)(0,0)\sendMP{pair zz[]; color c[], cc[]; c0=-white;% 立方体の頂点 (変形前)c1-c0=2red; c2-c0=2green; c4-c0=2blue; c3-c0=(c1-c0)+(c2-c0);
c5-c0=(c1-c0)+(c4-c0); c6-c0=(c2-c0)+(c4-c0); c7-c0=(c1-c0)+(c2-c0)+(c4-c0);pair zz[]; color cc[];vardef drawcube(text tt)(suffix pp)(expr xx,yy) = %立方体の描画だけのマクロfor n=0 upto 7: zz[n]:=w*tt(cc[n]); endfor
xfillpic(pp)(red)zz1--zz3--zz7--zz5--cycle;

xfillpic(pp)(green) zz2--zz3--zz7--zz6--cycle;
xfillpic(pp)(blue)

zz4--zz5--zz7--zz6--cycle;

drawpic(pp) zz5--zz1--zz3--zz2--zz6--zz4--zz5--zz7--zz6; drawpic(pp) zz3--zz7;
xdrawpic(pp)(tensen()) zz1--zz0--zz2; xdrawpic(pp)(tensen()) zz0--zz4;
draw pp shifted(xx,yy);enddef; %マクロ定義終わり

newpic(pct)("0upto8");%

picture 値変数を確保

SetProjDir(3,2,1)(0,0,1);%

射影方向指定 (正射影)for n=0 upto 7: cc[n]:=c[n]; endfor %まずもとの立方体を描く

drawcube(proj)(pct0)(0,3h);z0=0.5[zz1,zz7]+3w*up; z1=0.5[zz3,zz6]+3w*up; z2=0.5[zz5,zz6]+3w*up;
z3=z0+1.2(zz1-zz0); z4=z1+0.8(zz2-zz0); z5=z2+0.7(zz4-zz0);}\mptDrawPath[arrowtype=->]{z0--z3}\mptLabel{z3}[t]<0mm,-2mm>{$x$}% x 軸\mptDrawPath[arrowtype=->]{z1--z4}\mptLabel{z4}[t]<0mm,-2mm>{$y$}% y 軸\mptDrawPath[arrowtype=->]{z2--z5}\mptLabel{z5}[l]<2mm,0mm>{$z$}%z 軸\sendMP{for n=0 upto 7: cc[n]:=c[n] XRotated20; endfor %x 軸方向 20 度回転

drawcube(proj)(pct1)(0,0);
for n=0 upto 7: cc[n]:=c[n] YRotated20; endfor %y 軸方向 20 度回転

drawcube(proj)(pct2)(5w,0);
for n=0 upto 7: cc[n]:=c[n] ZRotated20; endfor %z 軸方向 20 度回転

drawcube(proj)(pct3)(9w,0);
c8 方向を回転軸とする回転

c8:=(1,1,1);%for n=0 upto 7: cc[n]:=c[n] Rotated (latitude c8,longitude c8,20); endfordrawcube(proj)(pct4)(13w,0);}\sendMP{SetPersDir(15,10,5)(-2,3,0)(-3,-2,13);%for n=0 upto 7: cc[n]:=c[n] XRotated20; endfor %射影方向指定 (遠近法)

x 軸方向 20 度回転

drawcube(pers)(pct5)(0,-3.5h);
for n=0 upto 7: cc[n]:=c[n] YRotated20; endfor %y 軸方向 20 度回転

drawcube(pers)(pct6)(5w,-3.5h);
for n=0 upto 7: cc[n]:=c[n] ZRotated20; endfor %z 軸方向 20 度回転

drawcube(pers)(pct7)(9w,-3.5h);
c8 方向を回転軸とする回転

c8:=(1,1,1);%for n=0 upto 7: cc[n]:=c[n] Rotated (latitude c8,longitude c8,20); endfordrawcube(pers)(pct8)(13w,-3.5h);}\mptZuLabel{(6.5w,-5.5h)}{立方体 2}\end{MPpic}

47

4.4

関数のグラフ

4.4.1

陽関数のグラフ

y

y
1

128

30◦

4
−4

O
−128

60◦

90◦

120◦ 150◦−150◦ −120◦ −90◦ −60◦ −30◦ O

x

x

−1

y = sin x − sin 2x

図 62

y = x3 − 48x

図 61
図 61 のソース\begin{MPpic}<3mm,0.05mm>(10|10,500|500)\mptXaxis[tr]<0mm,-2mm>{$x$}\mptYaxis[tl]<2mm,0mm>{$y$}%x 軸と y 軸\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%
原点に「O」というラベルを配置 (以下の 4 つも同様)\mptLabel{(4w,0)}[b]<0mm,1mm>{4}\mptLabel{(-4w,0)}[t]<0mm,-1mm>{$-4$}\mptLabel{(0,128h)}[l]<1mm,0mm>{128} \mptLabel{(0,-128h)}[r]<-1mm,0mm>{$-128$}
図の下方に関数式を配置\mptLabel{(5w,-500h)}[b]{$y = x^3 - 48x$}%\sendMP{xdraw(1pt) ClipPATH(kansu(t*t*t-48t)(-10,10,50));% 関数のグラフの描画 (はみ出し削除)
for zz=(-4w,128h),(4w,-128h): xdraw(0.4pt,hasen()) Pline(zz); endfor}% 補助線\mptZuLabel{(-4w,-500h)}[b]{3 次関数}
\end{MPpic}
図 62 のソース\begin{MPpic}<0.3mm,12mm>(180|180,2|2)\mptXaxis[tr]<0mm,-2mm>{$x$} \mptYaxis[tl]<2mm,0mm>{$y$}%x 軸と y 軸\mptDrawTick{-150w step 30w until 151w}{-h,h}%

座標軸に目盛\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%

原点に「O」というラベルを配置\mptLabel{(90w,-2h)}[b]{$y=\sin x - \sin 2x$}%図の下方に関数式を配置\sendMP{xdraw(1pt) kansu(sind t - sind 2t)(-180,180,200);}%関数のグラフの描画\mptCoord(-150,0)(30,0){5}[t]<0mm,-1mm>{\small$\xcoord^\circ$}% 座標軸に数値\mptCoord(30,0)(30,0){5}[b]<0mm,1mm>{\small$\xcoord^\circ$}%

上のつづき\mptLabel{(0,h)}[r]<-1mm,0mm>{\small 1}%

上のつづき\mptLabel{(0,-h)}[r]<-1mm,0mm>{\small $-1$}%

上のつづき\mptZuLabel{(-30w,-2h)}[b]{波の合成}\end{MPpic}

y

π
O

3π
2π

5π
4π

7π

9π

6π

図 63

減衰曲線 y = ax sin x ( a < 1 )

48

8π
200

a = (0.99) 30 = 0.93519 · · ·x

図 63 のソース

\begin{MPpic}<5mm,15mm>(30|1,1.2|1.2)\mptXaxis[l]<0.5mm,0mm>{$x$} \mptYaxis[tl]<2mm,0mm>{$y$}% x 軸と y 軸\mptLabel{origin}[tr]<-1mm,-1mm>{O}%

原点に「O」というラベルを配置\sendMP{for n=1upto4: %座標軸に数値 for 文で一気にSaveLabel((w*2n*PI,0),"[tl]<1mm,-1mm>","$"&decimal 2n&"\pi$");
SaveLabel((w*(2n+1)*PI,0),"[bl]<1mm,1mm>","$"&decimal(2n+1)&"\pi$");
endfor}\mptLabel{(w*PI,0)}[bl]<1mm,1mm>{$\pi$}%

上のつづき\mptLabel{(2.5w,-h)}[t]<0mm,1mm>{減衰曲線 $y = a^x \sin x$ ( $a<1$ )}% 図の下方に関数式\sendMP{numeric a; a:=1;%指数関数を直接使ってもいいけど，ここではちょっと趣向を変えて% 繰り返し処理ごとに a を 0.99 倍していくことによって一定の割合で倍率を下げていった．
% hide は周囲の「文構造」に影響を与えず，こっそり「値のみを設定」するマクロ
xdraw(1pt) kansu(hide(a:=a*0.99) a*sin t)(0,30,200);}\mptZuLabel[label={$\dis a = (0.99)^{\frac{200}{30}} = 0.93519\cdots$}]{(24w,-h)}{減衰曲線}y\end{MPpic}

座標平面上で原点を通る直線と y = x|x + 2| のグラフが相異なる 3 点で交わっている．このグラフとこの直線によって囲まれる図形で，この直線より下側にあるものの面積を S1 , 上
側にあるものの面積を S2 とする．S1 : S2 = 9 : 8 となるとき，この直線の傾きを求めよ．
注 オリジナルの入試問題には図はついていません．

−2
O
S2

x

S1

[’99 京大 (後期)]3 (1)
xy 平面上の 3 次曲線 K : y = x x2 −について，次の問いに答えよ．
23( 1 ) 原点で曲線 K と接線を共有している円 C の方程式を求めよ．ただし，円 C の中心

図 64

y

の x 座標を p ( p ̸= 0 ) とせよ．

( 2 ) さらに，曲線 K と円 C とが，原点以外の K 上の点でも接線を共有するとき，円 Cの方程式を求めよ．
注 オリジナルの入試問題には図はついていません．

[’97 関西学院大学 (理)]O

図 64 のソース

x
図 65\begin{MPpic}<1cm,1.5cm>(1|3,0)(0,-1.5)\sendMP{SetArea()(-1.5,0.5);% 今回は高さ深さを 0 にしたので y の範囲を指定
path ptha,pthb;%

パス変数宣言↓折れた放物線 -3 ≦ x ≦-2 を 20 分割

ptha:=kansu(-t*(t+2))(-3,-2,20)--kansu(t*(t+2))(-2,1,60);%-2 ≦ x ≦ 1 を 60 分割

pthb:=Linear(1/2t); % 直線 y = 1/2 x% buildcycle は複数の交わるパスから巡回パスを作るマクロ% (パスに沿って動き初めて見つかった交点で次の曲線に移る)% 注：subpath や reverse を使っているのは「初めて見つかった」交点 = 境界の交点とするため
xfill(3pt*dir45) buildcycle(subpath(20,81)of ptha,reverse pthb);}% 斜線\mptDrawPath[filltype=shasen,shadir=-45,shadist=3pt,linetype=none]{buildcycle(subpath(0,40)of ptha,reverse pthb)}% 斜線を \mptDrawPath で\mptXaxis[tr]<0mm,-2mm>{$x$} \mptYaxis[r]<-1mm,0mm>{$y$}%x 軸と y 軸\mptLabel{origin}[tl]<1mm,-1mm>{O}%

原点に「O」というラベルを配置\mptLabel{(-0.9w,-0.75h)}{$S_1$}%

領域内に「S1」というラベルを配置\mptLabel{(-2w,-0.6h)}<0.3mm,0mm>{$S_2$}%

領域内に「S2」というラベルを配置\mptLabel{(-2w,0)}[b]<0mm,1mm>{$-2$}%

座標\sendMP{xdraw(1pt) ClipPATH(ptha); xdraw(1pt) pthb;} %曲線描画 (はみ出し削除)\mptZuLabel{(w,-1.5h)}[br]{面積}\end{MPpic}
49

図 65 のソース

\begin{MPpic}<2cm,2cm>(1|1,0)
今回は高さ深さを 0 にしたので y の範囲を指定\sendMP{SetArea()(-0.5,1.4);}%\mptXaxis[tr]<0mm,-2mm>{$x$} \mptYaxis[r]<-1mm,0mm>{$y$}%x 軸と y 軸\mptLabel{(0,0)}[tr]<-1mm,-1mm>{O}%

原点に「O」というラベルを配置\sendMP{numeric p; p=(sqrt5)/9; pair ctr; ctr:=(p*w,2p*h);%

円の中心の座標を設定
円の描画

xdraw(1pt) circle(ctr,origin);%xdraw(1pt) ClipPATH(kansu(1.5t*(t*t-1/3))(-1,1,50));}% 3 次関数のグラフの描画\mptZuLabel{(w,-0.5h)}[br]{3 次関数と円}\end{MPpic}yy = 2(x − 21 )2 + 12

図 66

8

y = 2x2y4
2−4−3 −1 O
−2

x
1

3

1

4
y = 2(x + 12 )2 + 212

x = 1 − y42

x = 4 − y16

1
2

2

−8

x = y4 − 1

図 67

− 12

2

x = y16 − 4

O

1
2

x

図 66 のソース’72 東大入試・文科-3 答の図\begin{MPpic}<5mm,2.5mm>(5|5,20)(0,-10)%% x=f(y) の形の「陽関数」を扱うマクロはありませんが，% (x,y)=(f(t),t) というパラメータ表示と考えれば目的は達せられます．
% そういう意味ではこれはパラメータ関数の方へ分類すべきかも知れませんが．
\mptPath{ptha}{kansuP(4-t*t/16,t)(-10,10,50);}%

1 つ目のグラフ (設定のみ)
2 つ目のグラフ (設定のみ)\mptPath{pthb}{kansuP(t*t/16-4,t)(-10,10,50);}%\mptPath{pthc}{kansuP(1-t*t/4,t)(-sqrt24,sqrt24,50);}%

3 つ目のグラフ (設定のみ)\mptPath{pthd}{kansuP(t*t/4-1,t)(-sqrt24,sqrt24,50);}%

4 つ目のグラフ (設定のみ)\mptPath{pthe}{buildcycle(ptha,reverse pthb,reverse pthc,subpath(25,50) of pthd)}% 領域境界
\mptDrawPath[linetype=none,filltype=shasen,shadir={45,-45}]{pthe}% 上記領域に網目をつける\mptLabel{origin}[tr]<-0.2mm,-0.2mm>{O}%

原点に「O」というラベルを配置\mptXaxis[br]<0mm,2mm>{$x$} \mptYaxis[l]<2mm,0mm>{$y$}%x 軸と y 軸\mptLabel{(0,4h)}[br]<-1mm,0mm>{4}%座標の数値表示 (以下同様)\mptLabel{(w,0)}[tl]<1mm,-1mm>{1}\mptLabel{(-w,0)}[tr]<-1mm,-1mm>{$-1$}\mptLabel{(3w,0)}[t]<0mm,-1mm>{3}\mptLabel{(-3w,0)}[t]<0mm,-1mm>{$-3$}\mptLabel{(4w,0)}[tl]<1mm,-1mm>{4} \mptLabel{(-4w,0)}[tr]<-1mm,-1mm>{$-4$}\mptLabel{(0,2h)}[r]<-3mm,0mm>{2}\mptLabel{(0,-2h)}[r]<-3mm,0mm>{$-2$}\mptLabel{(0,8h)}[r]<-3mm,0mm>{8}\mptLabel{(0,-8h)}[r]<-3mm,0mm>{$-8$}\mptLabel{(5w,-5h)}[tr]<2mm,0mm>{{\small$x=\frac{y^2}{4}-1$}}\mptLabel{(-5w,-5h)}[tl]<-2mm,0mm>{{\small$x=1-\frac{y^2}{4}$}}\mptLabel{(9/4w,-10h)}[bl]{{\small$x=\frac{y^2}{16}-4$}}\mptLabel{(-9/4w,-10h)}[br]{{\small$x=4-\frac{y^2}{16}$}}\sendMP{for p=ptha,pthb,pthc,pthd: xdraw(1pt) p; endfor %4 つのグラフをまとめて描画

xdraw(0.4pt,hasen()) (-3w,0)--(-3w,4h)--(3w,4h)--(3w,0);}% 補助線 (破線)\mptZuLabel{(5w,10h)}[tr]{斜線領域 1}\end{MPpic}
50

図 67 のソース

\begin{MPpic}<20mm>(1.4|1.4,2.8)(0,-0.3)
1 つ目のグラフ\mptPath{ptha}{kansu(2t*t)(-1,1,50);}%\mptPath{pthb}{ptha shifted (-0.5w,0.5h);}% 今回 3 つの放物線は合同なのでのこり 2 つは\mptPath{pthc}{ptha shifted (0.5w,0.5h);}%1 つめを平行移動して作る

囲まれる領域に斜線を引く．同時に太い白線で境界のそばを少し消し「境界含まず」を表現%\sendMP{xfilldraw(3pt*dir45)(white,5pt) buildcycle(reverse ptha,pthb,pthc);}\mptLabel{(0.5w,0)}[t]<0mm,-1mm>{$\frac{1}{2}$}\mptLabel{(0,h)}[r]<-1mm,0mm>{1}% 座標等記入\mptLabel{(-0.5w,0)}[t]<0mm,-1mm>{$-\frac{1}{2}$} \mptLabel{(w,2h)}[b]{\small$y=2x^2$}\mptLabel{(0,0.5h)}[tr]<-1mm,0mm>{$\frac{1}{2}$}\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}x 軸と y 軸\mptXaxis[tr]<0mm,-2mm>{$x$} \mptYaxis|-0.25h==2h>[tl]<2mm,0mm>{$y$}%\mptLabel{(-0.35w,2h)}[b]{\small$y=2(x-\frac{1}{2})^2+\frac{1}{2}$}\mptLabel{(-1.4w,0.5h)}[t]<1mm,2mm>{\small$y=2(x+\frac{1}{2})^2+\frac{1}{2}$}\sendMP{for p=ptha,pthb,pthc: xdraw(1pt) ClipPath(p)()(-0.3,2); endfor % 3 つのグラフを描画
xdraw(0.4pt,hasen()) (-0.5w,0)--(-0.5w,0.5h)--(0.5w,0.5h)--(0.5w,0);}% 補助線 (破線)\mptZuLabel{(1.4w,0)}[br]<-1mm,1mm>{斜線領域 2}\end{MPpic}

y

y
b

a2

2

1
O

S

3
a
図 68 のソース

O

x

b

−3

図 68

x

図 69

\begin{MPpic}<12mm>(2|2,1.5|1)(0,0.5)\sendMP{xfill(0.8) kansu(t*t)(-1/1.1,1.1,50)--cycle;% 領域塗りつぶし
z0=(-w/1.1,h/1.21); z1=(1.1w,1.21h);}%以下で使う点の定義\mptLabel{(x0,0)}[t]<0mm,-0.5mm>{$a$} \mptLabel{(x1,0)}[t]<0mm,-0.5mm>{$b$}%

座標等書き込み\mptLabel{(0,h)}[br]<-0.5mm,0mm>{1}(通常タイプ)\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O} %\mptLabel{(0,y0)}[b][dist=8mm*dir140,arcdir=-30,arrowtype=->]<0mm,0.5mm>{$a^2$}% (注釈つき)\mptLabel{(0,y1)}[b][dist=5mm*dir50,arcdir=20,arrowtype=->]<0mm,0.5mm>{$b^2$}\mptLabel{(0.5w,0.5h)}[l][dist=10mm*dir10,arrowtype=-*,arrowlength=3pt]<0.5mm,0mm>{$S$}\mptXaxis[l]<0.5mm,0mm>{$x$} \mptYaxis[b]<0mm,0.5mm>{$y$}%x 軸と y 軸\sendMP{xdraw(0.8pt) kansu(t*t)(-sqrt2,sqrt2,80); xdraw(0.8pt) ExtLine(z0,z1);%

放物線と直線

for n=0,1: xdraw(0.4pt,hasen()) Pline(z[n]); endfor}%\mptZuLabel{(0,-0.5h)}[t]<0mm,-1mm>{注釈記入}\end{MPpic}
図 69 のソース\begin{MPpic}<5mm,3mm>(5|2.5,6|5)(0,0)
座標等記入\mptLabel{origin}[br]<-0.5mm,0.5mm>{O}%\mptLabel{(3w,0)}[tl]<0mm,-0.5mm>{3} \mptLabel{(0,-3h)}[r]<-0.5mm,-0.5mm>{$-3$}\sendMP{xfill(0.8white) kansu(t*t-2t-3)(-1,3,50)--cycle;}% 領域塗りつぶし\mptXaxis[l]<0.5mm,0mm>{$x$} \mptYaxis[b]<0mm,0.5mm>{$y$}% x 軸と y 軸\sendMP{xdraw(hasen(1.5)) kansu(t*t-2t-3)(-2.1,4.1,70); %放物線 (破線)

xdraw(0.8pt) kansu(t*t-2t-3)(0,3,50);%

放物線 (太線で上書き)

tanten(0,-3h); Tanten(3w,0)(1.5pt);}%端点 (白丸と黒丸)\mptZuLabel{(5w,-5h)}[br]{端点記入}\end{MPpic}51

補助線 (破線)

次はグラフの補正です．

y

y

図 70

y

図 71

1
e

図 72

1
e
x

e

O

y=

log x
x

a

O

x

e

O
t

a

y = AccFun(exp1,0.7)(

y = AccFun(a,c)(t)

log x
)
x

図 70 のソース\begin{MPpic}<8mm,30mm>(8|0.5,0.7|0.7)% もとの関数は 0 への収束が極めて遅い\sendMP{z0=(w*exp1,h/exp1);}% 極値点↓ 極値の記入\mptLabel{(x0,0)}[t]<0mm,-0.5mm>{$e$} \mptLabel{(0,y0)}[r]<-0.5mm,0mm>{$\dis \frac{1}{e}$}原点に「O」というラベルを配置\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%\mptLabel{(0.8w,-0.7h)}[bl]<0mm,0mm>{$\dis y = \frac{\log x}{x}$}% 関数式を表示\mptXaxis|==>[l]<0.5mm,0mm>{$x$} \mptYaxis|==>[tr]<-1mm,0mm>{$y$}% x 軸と y 軸\sendMP{xdraw(0.8pt) ClipPATH(kansu(ln t/t)(0.6,8,100));%

関数を描画
補助線 (破線)

xdraw(0.4pt,hasen()) Pline(z0);}%\mptZuLabel{(4w,0.7h)}[t]{補正前その 1}\end{MPpic}
図 71 のソース\begin{MPpic}<7mm>(4|1,3|3)(0,2)\sendMP{numeric a,c; a:=2; c:=1;% ↓ 補正のために使う関数を描画
xdraw(1.2pt) ClipPATH(kansu(AccFun(a,c)(t))(-1,4,50));
xdraw(0.4pt,hasen()) Pline(a*w,a*h);}% 補助線 (破線)
座標を記入

\mptLabel{(a*w,0)}[t]<0mm,-0.5mm>{$a$}%\mptLabel{(0,a*h)}[r]<-0.5mm,0mm>{$a$}

原点に「O」というラベルを配置\mptLabel{origin}[tl]<0.5mm,-0.5mm>{O}%\mptLabel{(4w,-h)}[tr]<0mm,0.5mm>{$y=\texttt{AccFun(a,c)(t)}$}%

関数式を表示\mptXaxis|==>[l]<0.5mm,0mm>{$t$} \mptYaxis|==>[tr]<-1mm,0mm>{$y$}% x 軸と y 軸\mptZuLabel{(2w,5h)}[t]{補正用関数その 1}\end{MPpic}
図 72 のソース\begin{MPpic}<8mm,30mm>(8|0.5,0.7|0.7)% x = e 以降の変化を加速させた図\sendMP{z0=(w*exp1,h/exp1);}% 極値点↓ 極値の記入\mptLabel{(x0,0)}[t]<0mm,-0.5mm>{$e$} \mptLabel{(0,y0)}[r]<-0.5mm,0mm>{$\dis \frac{1}{e}$}\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%

原点に「O」というラベルを配置\mptLabel{(0.8w,-0.7h)}[bl]<0mm,0mm>%関数式を表示{$\dis y = \texttt{AccFun(exp1,0.7)(}\frac{\log x}{x}\texttt{)}$}\mptXaxis|==>[l]<0.5mm,0mm>{$x$} \mptYaxis|==>[tr]<-1mm,0mm>{$y$}%x 軸と y 軸\sendMP{xdraw(0.8pt) ClipPATH(kansu(AccFun(exp1,0.7)(ln t/t))(0.6,8,100));% 関数を描画
補助線 (破線)

xdraw(0.4pt,hasen()) Pline(z0);}%\mptZuLabel{(4w,0.7h)}[t]{補正後その 1}\end{MPpic}
52

y=

y

e2x
9x2 + 2

2

e3
3

4

e3
6

図 73
図 73 のソース

1 2
3 3

2

e3
3

y
4

d

O

e2x
+ DifFun(1/3,2/3,-0.02)
9x2 + 2
y

y=

x

O

e3
6

y = DifFun(a,b,d)

a

x

b
図 74

x

1 2
3 3

O
図 75

\begin{MPpic}<15mm,25mm>(2|1.2,1.2|0.4)% もとの関数は極大値と極小値の差が極めて小さい\sendMP{z1=(1/3w,h/3*exp(2/3)); z2=(2/3w,h/6*exp(4/3)); z1y=(0,y1); z2y=(0,y2);}% 極値点\mptLabel{(x1,0)}[t]<0mm,-0.5mm>{$\dis \frac{1}{3}$}% 極値の x 座標
↓ 極値の y 座標

\mptLabel{(x2,0)}[t]<0mm,-0.5mm>{$\dis \frac{2}{3}$}%\mptLabel{z1y}[bl][dist=5mm*dir55,arrowtype=->]<0mm,0.5mm>{$\dis \frac{e^{\frac{2}{3}}}{3}$}\mptLabel{z2y}[r][dist=5mm*dir145,arrowtype=->]<-0.5mm,0mm>{$\dis \frac{e^{\frac{4}{3}}}{6}$}
原点に「O」というラベルを配置\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%\mptLabel{(2w,1.2h)}[br]<0mm,0.5mm>{$\dis y = \frac{e^{2x}}{9x^2 + 2}$}% 関数式を表示\mptXaxis|==>[l]<0.5mm,0mm>{$x$} \mptYaxis|==>[b]<0mm,0.5mm>{$y$}%x 軸と y 軸\sendMP{xdraw(0.8pt) ClipPATH(kansu(exp(2t)/(9t*t+2))(-1.5,2,100));%

関数を描画

for n=1,2: xdraw(0.4pt,hasen()) Pline(z[n]); endfor}%\mptZuLabel{(-1.2w,-0.4h)}[bl]{補正前その 2}

補助線 (破線)\end{MPpic}
図 74 のソース\begin{MPpic}<8mm>(5|1,3|1.2)% 補正のために使う関数を描画 ↓\sendMP{numeric a,b,d; a:=1; b:=2; d:=2; xdraw(1.2pt) kansu(DifFun(a,b,d))(-1,5,50);
xdraw(0.4pt,hasen()) Pline(b*w,d*h);}% 補助線 (破線)

↓ 座標等を記入\mptLabel{(a*w,0)}[t]<0mm,-0.5mm>{$a$} \mptLabel{(b*w,0)}[t]<0mm,-0.5mm>{$b$}\mptLabel{(0,d*h)}[r]<-0.5mm,0mm>{$d$} \mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}\mptLabel{(5w,d*h)}[br]<-5mm,0.5mm>{$y=\texttt{DifFun(a,b,d)}$}%

関数式を表示\mptXaxis|==>[l]<0.5mm,0mm>{$x$} \mptYaxis|==>[b]<0mm,0.5mm>{$y$}% x 軸と y 軸\mptZuLabel{(5w,-1.2h)}[br]{補正用関数その 2}\end{MPpic}
図 75 のソース\begin{MPpic}<15mm,25mm>(2|1.2,1.2|0.4)% 極小値を 0.02 ↓ 減らして極大値との差を少し拡大した図\sendMP{z1=(1/3w,h/3*exp(2/3)); z2=(2/3w,h/6*exp(4/3)-0.02h); z1y=(0,y1); z2y=(0,y2);}% 極値点\mptLabel{(x1,0)}[t]<0mm,-0.5mm>{$\dis \frac{1}{3}$}% 極値の x 座標
↓ 極値の y 座標

\mptLabel{(x2,0)}[t]<0mm,-0.5mm>{$\dis \frac{2}{3}$}%\mptLabel{z1y}[bl][dist=5mm*dir55,arrowtype=->]<0mm,0.5mm>{$\dis \frac{e^{\frac{2}{3}}}{3}$}\mptLabel{z2y}[r][dist=5mm*dir145,arrowtype=->]<-0.5mm,0mm>{$\dis \frac{e^{\frac{4}{3}}}{6}$}
原点に「O」というラベルを配置\mptLabel{origin}[tr]<-0.5mm,-0.5mm>{O}%\mptLabel{(2w,1.2h)}[br]<0mm,1mm>{$\dis y = \frac{e^{2x}}{9x^2 + 2} + \texttt{DifFun(1/3,2/3,-0.02)}$}% 関数式を表示\mptXaxis|==>[l]<0.5mm,0mm>{$x$} \mptYaxis|==>[b]<0mm,0.5mm>{$y$}%x 軸と y 軸\sendMP{xdraw(0.8pt) ClipPATH(kansu(exp(2t)/(9t*t+2)+DifFun(1/3,2/3,-0.02))(-1.5,2,100));
for n=1,2: xdraw(0.4pt,hasen()) Pline(z[n]); endfor}% 補助線 (破線)\mptZuLabel{(-1.2w,-0.4h)}[bl]{補正後その 2}\end{MPpic}

53↑ 関数を描画

4.4.2

パラメータ表示関数のグラフ

図 76 のソース

1y\begin{MPpic}<25mm>(0,0)(1.2,1.2)% 今回は図のサイズ 0 なので\sendMP{SetArea(-1.2,1.2)(-1.2,1.2);}%x,y の範囲を指定
グリッドの描画\mptDrawGrid%{-w step 0.25w until 1.01w}{-h step 0.25h until 1.01h}x\sendMP{xdraw(1pt) kansuP(sind3t,sind2t)(0,360,500)}% グラフ\mptXaxis[br]<0mm,2mm>{$x$} \mptYaxis[tl]<2mm,0mm>{$y$}% 軸 −1

1

O

\mptLabel{origin}[tr]<-1mm,-1mm>{O}% 原点に「O」というラベル\mptLabel{(w,0)}[tl]<1mm,-1mm>{1}%を表示 (以下も同様)\mptLabel{(-w,0)}[tr]<-1mm,-1mm>{$-1$}\mptLabel{(0,h)}[br]<-1mm,1mm>{1}−1\mptLabel{(0,-h)}[tr]<-1mm,-1mm>{$-1$}

x = sin 3t, y = sin 2t ( 0◦ ≤ t ≤ 360◦ )\mptLabel{(0,-1.2h)}[t]<-1mm,-1mm>

図 76{$x = \sin 3t$, $y = \sin 2t$ ( $0^\circ \leq t \leq 360^\circ$ )}\mptZuLabel{(0,-1.5h)}[t]<0mm,-1mm>{リサージュ図形 1}\end{MPpic}
図 77 のソース

1y\begin{MPpic}<25mm>(0,0)(1.2,1.2)\sendMP{SetArea(-1.2,1.2)(-1.2,1.2);}%x,y の範囲を指定
グリッドの描画\mptDrawGrid%{-w step 0.25w until 1.01w}{-h step 0.25h until 1.01h}x\sendMP{xdraw(1pt) kansuP(sind3t,sind4t)(0,360,500)}% グラフ\mptXaxis[br]<0mm,2mm>{$x$} \mptYaxis[tl]<2mm,0mm>{$y$}% 軸 −1

1

O

\mptLabel{origin}[tr]<-1mm,-1mm>{O}% 原点に「O」というラベル\mptLabel{(w,0)}[tl]<1mm,-1mm>{1}%を表示 (以下も同様)\mptLabel{(-w,0)}[tr]<-1mm,-1mm>{$-1$}\mptLabel{(0,h)}[br]<-1mm,1mm>{1}−1\mptLabel{(0,-h)}[tr]<-1mm,-1mm>{$-1$}

x = sin 3t, y = sin 4t ( 0◦ ≤ t ≤ 360◦ )\mptLabel{(0,-1.2h)}[t]<-1mm,-1mm>

図 77{$x = \sin 3t$, $y = \sin 4t$ ( $0^\circ \leq t \leq 360^\circ$ )}\mptZuLabel{(0,-1.5h)}[t]<0mm,-1mm>{リサージュ図形 2}\end{MPpic}y

図 78 のソース\begin{MPpic}<1cm>(3.5|0.5,0)(0,2.6)\mptXaxis[tr]<0mm,-2mm>{$x$}% x軸

sin,cos が弧度法

\mptYaxis|-0.5h==3h>[tr]<-2mm,0mm>{$y$} % y 軸↓であることに注意\sendMP{xdraw(1pt) kansuP(sin t - t*cos t,1+cos t + t*sin t)(0,PI,100);}\mptLabel{origin}[tr]<-1mm,-1mm>{O}% 原点に「O」というラベルを表示\mptLabel{(1.6w,-0.6h)}[t]{$\bigg\{\begin{array}{@{}l}x = \sin t - t \cos t \\ y = 1+\cos t + t \sin t \end{array}$}\mptZuLabel{(1.6w,-0.6h)}<0mm,-15mm>{弧度法グラフ 1}\end{MPpic}

54

O
{

x
x = sin t − t cos t
y = 1 + cos t + t sin t
図 78

図 79 のソース

y

図 79

1
図のサイズ 0 なので\begin{MPpic}<12mm>(0,0)(1.5,1.3)%−2x,y の範囲を指定\sendMP{SetArea(-2.5,1.5)(-2.5,1.5);%x% 次の 2 行が関数のグラフ --- 2 つ目は逆関数をパラメータ曲線として描画

1

O

xdraw(1pt) ClipPATH(kansu(t*(t*t+t-1))(-2.5,1.5,50));
xdraw(1pt) ClipPATH(kansuP(t*(t*t+t-1),t)(-2.5,1.5,50));
直線描画

xdraw(0.4pt) Linear(t);%−2

for zz=(-2w,-2h),(w,h):xdraw(0.4pt,hasen()) Pline(zz);% 補助線 (破線)
endfor}\mptXaxis[br]<0mm,1mm>{$x$} \mptYaxis[tl]<2mm,0mm>{$y$}% x 軸と y 軸
原点に「O」というラベルを表示\mptLabel{origin}[tr]<-1mm,-1mm>{O}%\mptLabel{(w,0)}[t]<0mm,-1mm>{1} \mptLabel{(-2w,0)}[b]<0mm,1mm>{$-2$}\mptLabel{(0,h)}[r]<-1mm,0mm>{1} \mptLabel{(0,-2h)}[l]<1mm,0mm>{$-2$}\mptZuLabel{(-2.5w,1.5h)}[tl]<-1mm,0mm>{逆関数}\end{MPpic}

4.4.3

極方程式のグラフ
図 82
図 80

O

r = sin 5t (0◦ ≤ t ≤ 360◦ )

図 81

1

1

O

1

O

r = sin 7t (0◦ ≤ t ≤ 360◦ )r = 1 + cos t (0◦ ≤ t ≤ 360◦ )図 80 のソース\begin{MPpic}<22mm>(1.2|1.2,1.5|1.5)\mptDrawGrid[polar]{0 step 0.2w until 1.41w}{36 step 36 until 360}% 極座標グリッドの描画\sendMP{xdraw(1pt) kansuR(sind5t)(0,360,500);%関数のグラフ描画
始線

xdraw("->") origin--(1.2w,0);}%原点に「O」というラベルを表示 (以下も同様)\mptLabel{origin}[tr]<-1mm,-1mm>{O}%\mptLabel{(w,0)}[tl]<1mm,-1mm>{1}\mptLabel{(0,-1.2h)}[t]<-1mm,-1mm>{$r = \sin 5t$ ($0^\circ \leq t \leq 360^\circ$)}\mptZuLabel{(0,h)}[b]<0mm,1mm>{正葉曲線 1}\end{MPpic}

55

図 81 のソース

\begin{MPpic}<22mm>(1.2|1.2,1.5|1.5)\mptDrawGrid[polar]{0 step 0.2w until 1.41w}{45 step 45 until 360}% 極座標グリッドの描画
関数のグラフ描画\sendMP{xdraw(1pt) kansuR(sind7t)(0,360,500);%

始線

xdraw("->") origin--(1.2w,0);}%原点に「O」というラベルを表示 (以下も同様)\mptLabel{origin}[tr]<-1mm,-1mm>{O}%\mptLabel{(w,0)}[tl]<1mm,-1mm>{1}\mptLabel{(0,-1.2h)}[t]<-1mm,-1mm>{$r = \sin 7t$ ($0^\circ \leq t \leq 360^\circ$)}\mptZuLabel{(0,h)}[b]<0mm,1mm>{正葉曲線 2}\end{MPpic}
図 82 のソース\begin{MPpic}<22mm>(2.2|0.6,1.6|1.8)\mptDrawGrid[polar]{0 step 0.25w until 2.01w}{45 step 45 until 315}% 極座標グリッドの描画
関数のグラフ描画\sendMP{xdraw(1pt) kansuR(1+cosd t)(-180,180,200);%

始線

xdraw("->") origin--(2.2w,0);}%原点に「O」というラベルを表示 (以下も同様)\mptLabel{origin}[tr]<-1mm,-1mm>{O}%\mptLabel{(w,0)}[tl]<0.5mm,-0.5mm>{1}\mptLabel{(0.8w,-1.6h)}[t]<-1mm,-1mm>{$r=1 + \cos t$ ($0^\circ \leq t \leq 360^\circ$)}\mptZuLabel{(2w,1.6h)}[tr]{カージオイド}\end{MPpic}
次の例は弧度法を用いた極方程式の例です．右の 図 83 は r =1のグラフです．
θy

図 83 のソース\begin{MPpic}<24mm>(1.4|0.4,0)(0,1.2)\mptXaxis[tr]<0mm,-2mm>{$x$}%x軸\mptYaxis|-0.3h==1.2h>[tr]<-2mm,0mm>{$y$}% y 軸\mptDrawPath{kansuRR(1/t)(0.6,5PI,100)}%関数のグラフ\mptZuLabel{(0.6w,0)}<0mm,-6mm>{弧度法グラフ 2}

図 83\end{MPpic}

4.4.4

空間曲線

図 84 のソース\begin{MPpic}<10mm>(0,0)(2.8,3)
射影方向指定\sendMP{SetProjDir(10,-30)(blue);%
xdraw(0.8pt) kansuQ(rdh(2,t,3))(60,240,50);%上底面奥xdraw(0.4pt) kansuQ(rdh(2,t,0))(60,240,50);%下底面奥xdraw(0.4pt) kansuQ(rdh(2,t,2sind t + 1))(60,210,50);%

切り口奥xdraw(0.4pt) proj(w*sqrt3,-w,0)--proj(-w*sqrt3,-w,0);%

切り口線分

odraw(0.1,0.04)(0.8pt) kansuQ(rdh(2,t,3))(-120,60,50);% 上底面手前
odraw(0.06,0.1)(0.8pt) kansuQ(rdh(2,t,2sind t + 1))(-30,60,50);% 切り口手前
xdraw(0.8pt) kansuQ(rdh(2,t,0))(-120,60,50);%

下底面手前

for theta=60,-120:
xdraw(0.8pt) proj(rdh(2w,theta,0))--proj(rdh(2w,theta,3w));%

側面境界

endfor}\mptZuLabel{(0,-0.8h)}{円柱切断}\end{MPpic}

56

図 84

x

図 85 のソース
射影方向 (経度) は「見える部分」\begin{MPpic}<10mm>(2.2|3,0)(0,6)%zにも関係するので定数化\sendMP{numeric theta; theta:=60;%

射影方向指定SetProjDir(25,theta)(blue);%↓下底面奥xdraw(0.8pt,hasen()) kansuQ(rdh(2,t,0))(theta+100,theta+260,30);
odraw()() proj(black)--proj(0,0,4w);%

z 軸下部

↓上底面奥

B

xdraw(0.8pt) kansuQ(rdh(2,t,4))(theta+90,theta+270,30);
xdraw(background,3pt) proj(0,0,4.1w)--proj(0,0,5w);}% 上底面奥を切る\mptLabel{origin}[t]<-0.5mm,-0.5mm>{O}%

原点に「O」というラベルを\mptXTaxis|0==3w>[t]<0mm,-0.5mm>{$x$}%x 軸\mptYTaxis|0==3w>[l]<0.5mm,0mm>{$y$}%y 軸\mptZTaxis|4w==5.5w>[b]<0mm,0.5mm>{$z$}% z 軸

O\mptPoint{z.A}[A][t]<0mm,-0.5mm>(3pt){proj(2w,0,0)}x

A\mptPoint{z.B}[B][b]<0mm,0.5mm>(3pt){proj(0,2w,4w)}\sendMP{odraw(0.1,0.1)(1pt) z.A--z.B;%

図 85

線分 AB

y

xdraw(0.8pt) kansuQ(rdh(2,t,0))(theta-100,theta+100,30);%

下底面手前

odraw(0.45,0.45)(0.8pt) kansuQ(rdh(2,t,4))(theta-90,theta+90,30);%

上底面手前 (z 軸を切る)

xdraw(0.8pt) kansuQ(rdh(((t-2)++2)/sqrt2,theta-90+5(t-2),t))(0,4,30);%

側面境界

xdraw(0.8pt) kansuQ(rdh(((t-2)++2)/sqrt2,theta+90-5(t-2),t))(0,4,30);}% 試行錯誤で関数決定\mptZuLabel{(0,-1.3h)}{空間曲線}\end{MPpic}
z

x
y

図 87
図 86

z = x2 − y 2

図 86 のソース\begin{MPpic}<10mm>(3.5|4.5,3|4.5)\sendMP{setunitlength(w,w,0.3w); SetProjDir(20,60)(blue);% 射影方向と単位長指定 (z 方向に圧縮)
SetPolyUra;%

こちらから見えている裏面を描く指定

drawSurface(s,t,s*s-t*t)(-3,3,10)(-3,3,10); %SetPolyOmote;%

曲面描画

こちらから見えている表面を描く指定 (裏面とかぶるときは上書き)

drawSurface(s,t,s*s-t*t)(-3,3,10)(-3,3,10);}%曲面描画\mptXTaxis|0==5w>[r]<-0.5mm,0mm>{$x$} \mptYTaxis|0==5w>[l]<0.5mm,0mm>{$y$}% x 軸と y 軸
z 軸\mptZTaxis|0==3w>[b]<0mm,0.5mm>{$z$}%\mptZuLabel[label={$z = x^2 - y^2$}]{(0,-4h)}{鞍型}\end{MPpic}

57

図 87 のソース

\begin{MPpic}<10mm>(4|4,1.8|1.8)\sendMP{SetProjDir(30,-90)(blue); numeric R,r; R:=3; r:=1;% 射影方向と半径指定
トーラスは表面しか見えない

SetPolyOmote;%%

ただし，奥の表面が手前の表面で上書きされないといけないのでパラメータの開始値に注意

drawSurface(rdh(R+r*cosd t,s,r*sind t))(0,360,30)(0,360,30);}\mptZuLabel{(0,-3h)}{トーラス}\end{MPpic}

4.5

任意曲線に沿ったサイクロイド

図 88
図 88 のソース\begin{MPpic}<1cm>(11|1,2|1)\mptPath{pth}{origin--(10w,0)}%

円が沿うパス (今回直線==>普通のサイクロイド)\sendMP{draw pth;%

上記のパスを描画

drawCycloid(pth,0.8w,100,(0,10));}%

細線で円の転がる様子を描画\sendMP[1pt]{drawCycloid(pth,0.8w,100,-1);}% 太線でサイクロイド描画 : drawCycloid で 1 つの\mptZuLabel{(5w,-h)}[b]{サイクロイド 1}%

命令であることに注意 (draw Cycloid ではない)\end{MPpic}

図 90

図 89
図 89 のソース\begin{MPpic}<8mm>(4|4,4|5)\mptPath{pth}{circle((0,0),4w)}%\sendMP{xdraw(hasen()) pth;%
drawCycloid(pth,w,100,10);}%

円が沿うパス (今回転がる円の 4 倍の半径の円==>アステロイド)
上記のパスを描画
細線で転がる円を 1 個描画\sendMP[1pt]{drawCycloid(pth,w,100,-1);}% 太線でサイクロイド描画\mptZuLabel{(0,-5h)}[b]{サイクロイド 2}\end{MPpic}

58

図 90 のソース

\begin{MPpic}<6.4mm>(5.2|6.5,5.5|6.5)%

円が沿うパス (今回転がる円と同じ円==>カージオイド) パスが上と逆順である (reverse がついている)\mptPath{pth}{reverse circle((0,0),2w)}%ことに注意---転がる円は中心の右でパスと接する\sendMP{xdraw(hasen()) pth;%

上記のパスを描画

drawCycloid(pth,2w,100,10);}%細線で転がる円を 1 個描画\sendMP[1pt]{drawCycloid(pth,2w,100,-1);}% 太線でサイクロイド描画\mptZuLabel{(0,-6.2h)}[b]{サイクロイド 3}\end{MPpic}

図 91
図 91 のソース\begin{MPpic}<1cm>(12|2,4|1)\mptPath{pth}{(0,0)..(2w,h)..(4w,0)..(8w,2h)..(10w,0)}% 円が沿うパス (てきとー^_^;)
上記のパスを描画\sendMP{xdraw(hasen()) pth;%

細線で円の転がる様子を描画

drawCycloid(pth,w,100,(0,10));}%

太線でサイクロイド描画\sendMP[1pt]{drawCycloid(pth,w,100,-1);}%\mptZuLabel{(6w,-h)}[b]{サイクロイド 4}\end{MPpic}

図 92
図 92 のソース\begin{MPpic}<1cm>(12|2,4|1)\mptPath{pth}{(0,0)..(2w,h)..(4w,0)..(8w,2h)..(10w,0)}% 円が沿うパス (てきとー^_^;)
上記のパスを描画\sendMP{xdraw(hasen()) pth;%drawTrochoid(pth,w,1.2,100,(0,10));}%\sendMP[1pt]{drawTrochoid(pth,w,1.2,100,-1);}%\mptZuLabel{(6w,-h)}[b]{トロコイド}\end{MPpic}59

細線で円の転がる様子を描画
太線でトロコイド描画

4.6

微分方程式の解としての曲線

1 階または 2 階の微分方程式を Runge-Kutta 法で近似的に解き，その解のグラフを path 値 で返してもらって描くことができます．
なお，1 階か 2 階かは，初期値の個数で区別しています．

u

u

t

O

図 93

t

O

du
= (t − u)2 , u(0) = 0
dt

図 94

d2 u
2(u′ )2, u(0) = 0, u′ (0) = 1
=
dt2
u−1

ちなみにこれらの微分方程式はそれぞれ解けて，解は次のようになります．
2
1
図 93 : u = t − 1 + 2t
図 94 : u = 1 −e +1t+1
図 93 のソース\begin{MPpic}<2cm>(2,1.2|1)\sendMP{xdraw(0.8pt) rungekutta((t-u)*(t-u))(0,2,0.01)(0);}% Runge-Kutta 法で近似解\mptLabel{origin}[r]<-0.5mm,0mm>{O}\mptXaxis|==>[l]<0.5mm,0mm>{$t$}\mptYaxis|-0.5h==>[b]<0mm,0.5mm>{$u$}\mptZuLabel[label={$\dis\frac{du}{dt} = (t - u)^2$, $u(0) = 0$},origin=b]{(w,-h)}{1 階微分 eq}\end{MPpic}
図 94 のソース\begin{MPpic}<2cm>(2,1.2|1)\sendMP{xdraw(0.8pt) rungekutta(2v*v/(u-1))(0,2,0.01)(0,1);}% Runge-Kutta 法で近似解\mptLabel{origin}[r]<-0.5mm,0mm>{O}\mptXaxis|==>[l]<0.5mm,0mm>{$t$}\mptYaxis|-0.5h==>[b]<0mm,0.5mm>{$u$}\mptZuLabel[label={$\dis\frac{d^2 u}{dt^2} = \frac{2(u’)^2}{u - 1}$, $u(0) = 0$, $u’(0) = 1$},origin=b]{(w,-h)}{2 階微分 eq}\end{MPpic}

なお，n 質点の運動方程式 ( 微分方程式 ) を Runge-Kutta 法によって解く RungeKutta ( p.116 を参照 ) という命令もあります．

60

4.7「データの分析」分野の図
図 95(人) 60

図 96

100

50

80

40

英語

60

30

40

20
20

10
0
0 10 20 30 40 50 60 70 80 90 100 (点)図 95 のソース

0
0

20

40
60
数学

80

100

\begin{MPpic}<0.7mm>(110|5,60|5)\sendMP{color MoMo,Aka,SoRa; HisWd:=10w;% 色名の宣言と，階級幅
SoRa:=hsb(0.5,0.2,1);% 色の定義

Aka:=(0.745,0,0.196);

MoMo:=hsb(0.95,0.2,1);

Histogram(5,10)(SoRa);

Histogram(15,23)(SoRa); Histogram(25,41)(SoRa);% ヒストグラム

Histogram(35,44)(SoRa); Histogram(55,32)(SoRa); Histogram(65,45)(SoRa);%

を描画

Histogram(75,51)(SoRa); Histogram(85,33)(SoRa); Histogram(95,21)(SoRa);
Histogram(45,60)(MoMo,Aka,2pt);% 1 ヶ所だけ色を変えて強調
xdraw(0.4pt) origin--(0,60h);}%

枠左線↓ 座標軸の数値等\mptCoord(0,0)(10,0){11}[t]<0mm,-0.5mm>{\xcoord} \mptLabel{(110w,0)}[t]<-1mm,-0.5mm>{(点)}\mptCoord(0,0)(0,10){7}[r]<-0.5mm,0mm>{\ycoord} \mptLabel{(0,60h)}[r]<-6mm,0mm>{(人)}\mptDrawGrid[xmin=0,xmax=100w,ymin=0,ymax=60h,linetype=dashed tensen(0.5),pensize=0.6pt]{0 step 10w until 100.1w}{0 step 10h until 60.1h}% グリッド描画\mptZuLabel{(100w,60h)}[br]<0mm,0.5mm>{ヒストグラム}\end{MPpic}
図 96 のソース\begin{MPpic}<0.45mm>(100|8,100|8)\mptDrawGrid[xmin=0,ymin=0,ymax=100h,pensize=0.4pt]{0w step 20w until 100.1w}{0h step 20h until 100.1h}% グリッド描画\sendMP{ScatterPlot(xfill(blue) circle(origin,2pt))((80,87),(30,27),(34,21),(58,90),(26,48),(38,36),(47,30),(30,36),(5,0),(48,36),(27,0), (75,89),(3,15), (60,71),(40,33),(60,63),(56,59),(52,40),(74,58),(52,60),(52,72),(50,54),(98,100),(54,60),(72,100));}% 散布図に書き込む点\mptCoord(0,0)(20,0){6}[t]<0mm,-0.5mm>{\xcoord} \mptLabel{(50w,-10h)}[t]{数 学}\mptCoord(0,0)(0,20){6}[r]<-0.5mm,0mm>{\ycoord} \mptLabel{(-10w,50h)}[r]{\hbox{\tate 英 語}}\mptZuLabel{(50w,100h)}[b]<0mm,0.5mm>{散布図}%\end{MPpic}

61↑ 座標軸の数値等

図 97

30

40

50

60

70

80

90

図 97 のソース\begin{MPpic}<1.2mm,5mm>(70,4|1)(25,0)% ↓箱ひげ図 2 個\sendMP{HakoHige(30,43,62,70,90,1)(); HakoHige(33,47,63,75,83,3)(3pt,hsb(0.5,0.2,1));}\mptDrawGrid[ymin=0,linetype=dashed hasen(),pensize=0.4pt]{30w step 10w until 90.1w}{}\mptCoord(30,0)(10,0){7}[t]<0mm,-1mm>{\xcoord} \mptXaxis|==>[l]<0mm,0mm>{}\mptZuLabel{(95w,2h)}[l]<2mm,0mm>{箱ひげ図}%↑ 座標軸の数値等↑↑ グリッド描画\end{MPpic}
なお，散布図などに用いるデータが多数 ( 例えば 100 組 ) の値からなるとき，100 個すべてをソースに書き込むのではなく，CSV ファイル∗54 や TSV ファイル∗55 などで別に管理する方が便利かも知れません．

CSV データや TSV データに保存された数値を読み込む例も挙げておきますと，次のようになります∗56 ．
図 98
100
80
英語

60
40
20
0
0

図 98 のソース

20

40
60
数学

80

100

\begin{MPpic}<0.45mm>(100|8,100|8)\mptDrawGrid[xmin=0,ymin=0,ymax=100h,pensize=0.4pt]% グリッドは前ページ散布図と同じ{0w step 20w until 100.1w}{0h step 20h until 100.1h}\sendMP{numeric v[][]; pair zz; newpic(p); transform S;% 変数を用意
z0=origin; z0v1=(0,2pt); xfillpic(p)(blue) StarPath(z0)(5); % 変数 p に星形を保存
zz:=ReadCSV("data.csv")(v);% CSV データ読み込み (zz の y 成分がデータを構成する値の個数)
for j=1 upto ypart zz:% すでに値が配列に読み込まれているので ScatterPlot を使う必要は無い
draw p shifted(w*v[j-1][0],h*v[j-1][1]); % 星形を打つ
endfor
S:=MvSdCov(v[1])(v[2])(1 upto ypart zz);% 平均・標準偏差・共分散を計算し S に保存
xdraw(red) linear(Regression(t)(S))(0,100)(0,100);}% その値をもとに回帰直線を描く\mptCoord(0,0)(20,0){6}[t]<0mm,-0.5mm>{\xcoord} \mptLabel{(50w,-10h)}[t]{数 学}\mptCoord(0,0)(0,20){6}[r]<-0.5mm,0mm>{\ycoord} \mptLabel{(-10w,50h)}[r]{\hbox{\tate 英 語}}\mptZuLabel{(50w,100h)}[b]<0mm,0.5mm>{CSV}% ↑ここは前ページ散布図と同じ\end{MPpic}∗54 表計算ソフトなどで使われる保存形式の 1 種で，comma separated value つまり各セルの値をコンマで区切って記述したテキストデータです．
テキストデータなので，各種加工が楽で，表計算ソフトだけでなく様々なソフトで読み込めます．
∗55 CSV のコンマの代わりに，タブ文字を区切りとするテキストデータです．
∗56 ここで読み込んでいるデータは，このマニュアルのソースがあるフォルダに CSV 形式で保存してあるものです．中身は 100 人分の成績データ( っぽいもの ) を，METAPOST の乱数機能ででっち上げたものです．

62

4.8

ベクトル場

図 99 ベクトル場 f (s, t) = (s2 − t2 , 2st)
図 99 のソース

図 100

ベクトル場 f (z) = z 2\begin{MPpic}<1.5cm>(2.8|2.8,3.1|3)\sendMP{for x=-2.5w step 0.5w until 2.5w:%

横方向は 0.5w 間隔で -2.5w から 2.5w まで

for y=-2.5h step 0.5h until 2.5h:% 縦方向は 0.5h 間隔で -2.5h から 2.5h まで
drawVectorField((x,y))(s*s-t*t,2s*t)(0.2w,0.5,0.4w,4pt);% ベクトル場の矢印を描く
endfor
endfor}\mptZuLabel[label={ベクトル場 $f(s,t)=(s^2-t^2,2st)$},origin=b]{(0,-3h)}{ベクトル場 1}\end{MPpic}
図 100 のソース

\begin{MPpic}<1.5cm>(2.8|2.8,3.1|3)\sendMP{for x=-2.5w step 0.5w until 2.5w:%

横方向は 0.5w 間隔で -2.5w から 2.5w まで

for y=-2.5h step 0.5h until 2.5h:% 縦方向は 0.5h 間隔で -2.5h から 2.5h まで
drawVectorField((x,y))(u zscaled u)(0.2w,0.5,0.3w,4pt);% ベクトル場の矢印を描く
endfor
endfor}\mptZuLabel[label={ベクトル場 $f(z)=z^2$},origin=b]{(0,-3h)}{ベクトル場 2}\end{MPpic}
図 99 と 図 100 は，表示式は違うように見えますが，実は同じものです．ベクトル場の「関数式」は ( x , y ) の代わりに ( s , t ) を使って記述します．一方，METAPOST において，点 ( x , y ) は複素数値 z = x + yi と等価に見られていますので，この z の代わりに u = s + ti も使えるように設定してあります．

u2 = (s2 − t2 ) + 2stiなので，2 つのベクトル場は同じであることが分かると思います．

63

図 101 のソース

\begin{MPpic}<1.5cm>(2.8|2.8,0)(0,2.5)% 横方向は 0.5w 間隔で -2.5w から 2.5w まで% 縦方向は 0.5h 間隔で -2.5h から 2.5h まで% ベクトル場の矢印を描く\sendMP{for x=-2.5w step 0.5w until 2.5w:
for y=-2.5h step 0.5h until 2.5h:
drawVectorField((x,y))(1,t)(0.2w,0.5,0.3w,4pt);
endfor
endfor}\mptZuLabel[label={ベクトル場 $f(s,t)=(1,t)$},origin=b]{(0,-3h)}{ベクトル場 3}\end{MPpic}
図 101

ベクトル場 f (s, t) = (1, t)

座標 (4.5,0.5) に

⃝
+

⃝
−

大きさ +1 の電荷，
座標 (11.5,0.5) に
大きさ -1 の電荷があるとして描画．

図 102
図 102 のソース

\begin{MPpic}<8mm>(16,6|5)\sendMP{%vardef fDenba(expr _q,_zo,_zr) =% 点 _zo に _q の電荷があるときの _zr の電場の計算をするマクロ
save _RR; numeric _RR;
_RR=length(_zr-_zo);((_q/(_RR*_RR))*unitvector(_zr-_zo))
マクロ定義終わり

enddef;%for x=0 step w until 16w:%

for y=-4h step h until 5h:%

横方向は w 間隔で 0 から 16w まで
縦方向は h 間隔で -4h から 5h までベクトル場の矢印を描く

drawVectorField((x,y))(fDenba(1,(4.5,0.5),u)+fDenba(-1,(11.5,0.5),u))(8w,0.5,0.8w,4pt);
endfor
endfor}\mptput(4.5,0.5){\MARU{$+$}}%+ 電荷の位置に + を表示\mptput(11.5,0.5){\MARU{$-$}}%- 電荷の位置に - を表示\mptZuLabel{(8w,-5h)}[b]{ベクトル場 4}\end{MPpic}
64

4.9

フラクタル

4.9.1

フラクタルジェネレーター

図 104

図 103
図 103 のソース

\begin{MPpic}<1cm>(4.5|0.5,4.8)(0,-1.2)\sendMP{draw FracGenerator((0,0),4w*dir60,4)(0,60,-120,60);%

第 1 辺 (左から上)draw FracGenerator(4w*dir60,4w*right,4)(0,60,-120,60);% 第 2 辺 (上から右)draw FracGenerator(4w*right,(0,0),4)(0,60,-120,60);}%

第 3 辺 (右から左)\mptZuLabel{(4.5w,-1.2h)}[br]{コッホ島}\end{MPpic}
図 104 のソース
有名 (?) なドラゴン曲線\begin{MPpic}<1cm>(7|2,4.8)(0,-2.3)%\sendMP{draw FracGenerator((0,0),(5w,0),4)(90,-90,-90,90,-90,90,90);}% たったこれだけ!
\mptZuLabel{(0,-2h)}[b]{ドラゴン}\end{MPpic}

4.9.2

パッキング

図 105

図 106

図 107

図 105 のソース

\begin{MPpic}<5cm,5cm>(1,1)\mptPath{ptha}{(0,0)--(w,0)--w*dir60--cycle}% もとになる三角形\sendMP{FracPack(ptha,4,0.5)(0,1,2)(fill);}%

指定回数縮小写像した後 fill (塗りつぶし)\mptZuLabel{(0,h)}[tl]<0mm,-1mm>{シェルペンスキー 1}\end{MPpic}

65

図 106 のソース

\begin{MPpic}<5cm,5cm>(1,1)\mptPath{ptha}{(0,0)--(w,0)--w*dir60--cycle}% もとになる三角形\sendMP{FracPack(ptha,4,0.5)(0,1,2)(draw);}%

指定回数縮小写像した後 draw (枠のみ)\mptZuLabel{(0,h)}[tl]<0mm,-1mm>{シェルペンスキー 2}\end{MPpic}
図 107 のソース

\begin{MPpic}<2.5cm,2.5cm>(2,2)% もとになる図形は正方形だが，縮小点が path を構成する点列になっていないといけないため% ちょっと長いパス定義になっている\mptPath{ptha}{(0,0)--(w,0)--(2w,0)--(2w,h)--(2w,2h)--(w,2h)--(0,2h)--(0,h)--cycle}\sendMP{FracPack(ptha,3,1/3)(0,1,2,3,4,5,6,7)(fill);}%

指定回数縮小写像した後 fill\sendMP{FracPack(ptha,3,1/3)(0,1,2,3,4,5,6,7)(undraw);}% 指定回数縮小写像した後 undraw\mptZuLabel{(w,h)}{正方}%undraw は白で細かな枠線を描いている\end{MPpic}

4.9.3

ヒルベルト曲線

図 108 のソース

図 108

\begin{MPpic}<2cm>(5,5)\sendMP{xdraw(1pt) FracHilbert(5w,4);}% ヒルベルト曲線 --- これだけ!
\mptZuLabel{(2.5w,0)}[t]<0mm,-1mm>{ヒルベルト}\end{MPpic}

66

4.9.4二進木

図 109

図 109 のソース

二進木

\begin{MPpic}<2cm>(5,3.5)%\sendMP{drawBinTree((2.5w,h),(0,h),11)(0.7,-45,45)("withcolor PineGreen");}% これだけ!
\mptZuLabel{(2.5w,0)}[t]<0mm,-1mm>{木}\end{MPpic}

4.10

描画点の表示・ペンの変更など
2
4

3

図 111

1

3

図 110

1

2
図 112

図 110 のソース

\begin{MPpic}<5cm>(1.5|0.5,1.2|0.2)\sendMP{z1=(0,0); z2=(0.6w,h); z3=(w,0);%z1,z2,z3 を設定

xdraw(30pt,0.7white) z1..z2..z3;}% 灰色で極太の丸ペンで z1,z2,z3 を結ぶ曲線を描く%

デフォルトのペンの太さを 3pt に変更して z1,z2,z3 に点を打ちラベルを書き込む\sendMP[3pt]{dotLabels("[t]<0mm,-1mm>")(1,2,3);}\mptZuLabel{(0.5w,0)}[t]<0mm,-1mm>{ペン}\end{MPpic}
図 111 のソース

\begin{MPpic}<3mm>(5|5,14)(0,-8)\mptDrawPath[pen=penrazor scaled 5pt]{circle((0,0),5w)}% かみそりペン (penrazor) で円を描く\mptZuLabel{(0,-8h)}[b]<0mm,0mm>{かみそり}\end{MPpic}
67

図 112 のソース

\begin{MPpic}<3cm,4cm>(1.2,1|0.2)\sendMP{z1=(0,0); z2=z1+w*right; z4=z1+h*up; z3-z2=z4-z1;% z1,z2,z3,z4 を設定
pickup pensquare scaled 20pt;%

極太の角ペンでdraw z3--z4--z1 withcolor 0.7white;%

灰色で z3,z4,z1 を結ぶ折れ線を描く

pickup pencircle scaled 20pt;%

極太の丸ペンでdraw z1--z2--z3--cycle withcolor 0.7white;% 灰色で z1,z2,z3 を結ぶ三角形を描く
draw z2--z4 withcolor 0.7white;%

灰色で z2,z4 を結ぶ線分を描く

pickup pencircle scaled 3pt;%

ペンの太さを 3pt に戻して

dotLabels("[t]<0mm,-1mm>")(1,2,3,4);}%z1,z2,z3,z4 に点を打ちラベルを書き込む\mptZuLabel{(0.5w,0)}[t]<0mm,-5mm>{ペン比較}\end{MPpic}

4.11

模式図の部品

12
0kg

9

3
3kg

1kg

2kg

6

図 113

図 114

図 113 のソース

\begin{MPpic}<12mm>(6,6)(0,-3)\sendMP{drawClock((3w,0),3w)(10,10)(3,6,9,12)(20pt,"\Huge\bfseries")(5pt,3pt);}\mptZuLabel{(0,-3h)}[bl]{時計}%パラメータ多いっすね (^_^;;\end{MPpic}
図 114 のソース

\begin{MPpic}<12mm>(6,6)(0,-0.4)\sendMP{drawPlatformScale(2.8,4)((0,0),6w,20)(3pt,(5pt,1pt),10pt)(5)("0kg","1kg","2kg","3kg")(10pt,"\small\bfseries")}% これも (^_^;\mptZuLabel{(3w,0)}[t]<0mm,-1mm>{はかり}\end{MPpic}
ちなみにこのマニュアルがタイプセットされた時刻は右図の通りです．

12

図 115 のソース
毎回更新

\begin{MPpic}<4mm>(6,0)(0,3)\mptRenew %93\sendMP*{drawClock((3w,0),3w)(\the\hour,\the\minute)}% \sendMP はこのように
2 回に分けてもよい．

6

上の方の \sendMP は \the\hour 等を

図 115\sendMP{(3,6,9,12)(10pt,"\bfseries")(5pt,3pt);}%\mptZuLabel{(3w,-3h)}[t]<0mm,-1mm>{現在時刻}%

展開するため * つき．

\end{MPpic}%
68

イ

ア

mg sin θ
mg cos θ

mg cos θmg sin θ
mg
θ

図 117

図 116
図 116 のソース

\begin{MPpic}<5mm,5mm>(10,12)(0,-1)\sendMP{z0=(0w,0h); z1=(8w,0h); z2=(0w,8h); z3=z2+1.5w*dir45; z4=0.6[z2,z1];% 座標設定
xdraw(3pt) z2--z3; xdraw(1pt) z0--z1--z2--cycle;%

順に，杭，斜面

Wagon(z4,3w,1.5w,-45,0mm);%台車

xdraw(1pt) spring(0.5[z2,z3],z4rr,0.3w,10);%バネdecForce(z4ct)(2w,-90,0.2w)(-45,45)(withcolor red);%

重力とその分解

Force(z4rr)(2w*sind45,135,0.2w)(withcolor blue);%

バネから受ける力

Force(z4tr)(2w*cosd45,45,0.2w)();}%

垂直抗力\mptAngleMark[label=$\theta$]{z2}{z1}{z0}%角度マーク\mptLabel{z4ct.e}[t]<0mm,-1mm>{$mg$}%

重力の値\mptLabel{z4ct.a}[tl]<1mm,0mm>{$mg \sin \theta$}%

重力の分解値\mptLabel{z4ct.b}[r]<-1mm,0mm>{$mg \cos \theta$}%

重力の分解値\mptLabel{z4tr.e}[bl]<1mm,1mm>{$mg \cos \theta$}%\mptLabel{z4rr.e}[bl]<2mm,1mm>{$mg \sin \theta$}%

垂直抗力の値
バネの弾力の値\mptZuLabel{(5w,-h)}[b]{斜面}\end{MPpic}
図 117 のソース

\begin{MPpic}<18mm>(6,3.5)(0,-0.5)
中心と底辺の一端を設定\sendMP{z0=(3w,0); z0A=z0+2.5w*right;%
drawProtractor(z0,5mm,(7mm,3pt),2w);}%

分度器の描画\mptLabel{z0+2.5w*dir45}[bl][dist=9mm*dir45,arrowtype=->]{ア}% 矢印つきラベル「ア」\mptLabel{z0+2.5w*dir110}[b][dist=9mm*dir110,arrowtype=->]{イ}% 矢印つきラベル「イ」\mptZuLabel{(3w,0)}[t]<0mm,-1mm>{分度器}\end{MPpic}

69

θ
θ
φ
θ

図 118

φ

図 119

図 120

図 118 のソース

\begin{MPpic}<7mm>(6,5.5|1.5)(0,-2.5)
2 つの三角定規の 2 点を揃えて\sendMP{z0A=z1C=(0,0); z0C=z1A=(6w,0);}%\sendMP[1pt]{drawTriangle.l(z0); drawTriangle.m(z1);}%
2 つの三角定規を描く\mptAngleMark[label=$\theta$,xshift=1mm,yshift=2mm]{z0B}{z0A}{z1B}% 角度マーク\mptAngleMark[label=$\varphi$,xshift=-1mm]{z1B}{z1A}{z0B}%

角度マーク\mptZuLabel{(0,-3h)}[l]{三角定規 1}\end{MPpic}
図 119 のソース

\begin{MPpic}<7mm>(6,4.5|1.5)\sendMP{z0A=z1C=(0,0); z0C=z1A=(6w,0);}%\sendMP[1pt]{drawTriangle.r(z0); drawTriangle.m(z1);}%

2 つの三角定規の 2 点を揃えて2 つの三角定規を描く\mptAngleMark[markradius=40pt,label=$\theta$,xshift=1.2mm,yshift=1mm]{z0B}{z0A}{z1B}\mptAngleMark[label=$\varphi$,yshift=1mm]{z0B}{z1A}{z1B}%←↑角度マーク\mptZuLabel{(3w,-h)}{三角定規 2}\end{MPpic}
図 120 のソース

\begin{MPpic}<7mm>(10.3,4.5|1.5)\sendMP{z0A=(0,0); z0C=z1B=(6w,0); z1C=z1B+(3sqrt2)*w*right;}%\sendMP[1pt]{drawTriangle.r(z0); drawTriangle.m(z1);}%

2 つの三角定規で 2 頂点ずつ設定
2 つの三角定規を描く\mptAngleMark[label=$\theta$,markradius=10pt,xshift=-1mm]{z1A}{z0B}{z0A}% 角度マーク\mptZuLabel{(5w,-h)}{三角定規 3}\end{MPpic}

図 121 のソース

\begin{MPpic}<5mm>(11|1,2)(0,9)\sendMP{z0bl=origin; z1tl=0.5[z0tl,z0tr];% 配置点指定
FillBeaker(z0)(5w,6w,0,0.2)red;%

ビーカー

FillFlask(z1)(2w,8w,100,1)blue;}%

フラスコ\mptZuLabel{z1+(0,-5h)}[t]<0mm,0mm>{ビーカーとフラスコ}
図 121\end{MPpic}

70試料の有機化合物
CuO
乾いた酸素

CaCl2 管ソーダ石灰管

図 122

図 123

図 122 のソース

\begin{MPpic}<7mm>(3|3,7)\sendMP{z1=(0,1.5h); z2b=1/3(z1tl+z1tr+z1);
FillCBeaker(z1)(2w,2.5h,0,0.3) hsb(0.5,0.5,1);% コニカルビーカー
Burette(z2)(0.8w,2h) hsb(0.5,0.5,1);}%

ビュレット\mptZuLabel{(-3w,0)}[bl]{滴定実験}\end{MPpic}
図 123 のソース

\begin{MPpic}<1mm>(110,50)\sendMP{z0=(35w,36h); z1=z0+(33w,-20h); z2=z1+(10w,0);% ガラス管の位置
GlassTube(z0)(5w,30h,90)("e")(0.8pt);% ガラス管 (横向き・空)↓ (縦向き・中身あり)

GlassTube(z1)(5w,16h,0)("g")(0.8pt); GlassTube(z2)(5w,16h,0)("f")(0.8pt);
xdraw(0.8pt) z0bl---(x1tl-w,y0bl)..{down}(x1tl,y0bl-w)---z1tl;%

1 つ目と 2 つ目をxdraw(0.8pt) z0br---(x1tl-w,y0br)..{down}(x1tr,y0bl-w)---z1tr;%

つなぐガラス管

xdraw(0.8pt) z1br{down}..(z1br+(w,-w))---(z2bl+(-w,-w))..{up}z2bl;% 2 つ目と 3 つ目をxdraw(0.8pt) z1bl{down}..(z1br+(w,-2w))---(z2br+(-w,-2w))..{up}z2br;%

つなぐガラス管

xdraw(0.8pt) z2tr---(x2tr,y0bl-w)..{right}(x2tr+w,y0bl)---(x2tr+10w,y0bl);%

末端のxdraw(0.8pt) z2tl---(x2tl,y0bl-w)..{right}(x2tl+w,y0br)---(x2tr+10w,y0br);%

ガラス管% ↓ CuO (銅網の表面を酸化したもののつもり)
for m=0upto6: draw ((0,-2w)--(0,2w))shifted(z0+(2w+0.8w*m,0)); endfor
for n=1upto18: draw ((0,0)--(4.8w,0))shifted(z0+(2w,2w*sind(3+20n))); endfor
z3=z0+(-3w,-2w);% 試料皿の位置

↓ 試料皿

↓↓ 試料

xdraw(1pt) ((-2w-3pt,3pt){curl0}..(-2w,0)---(2w,0)..{curl0}(2w+3pt,3pt)) shifted z3;
xfill(0.5) ((-2w,1pt)---(2w,1pt)..tension2..(0,3pt)..tension2..cycle) shifted z3;z4t=z0+(-3w,-2.5w);z5t=z0+(4.4w,-2.5w);%

バーナーの位置

BurnerFlame(z4)(3w,6w); BurnerFlame(z5)(3w,6w);}% バーナー描画\mptLabel{z0tr}[b]<0mm,5mm>{乾いた酸素}\sendMP{xdraw("->") (origin--10w*right)shifted(z0tr+(0,3.5mm));}\mptLabel{z0+(-3w,0)}[b][dist=10mm*up,arrowtype=->]<0mm,0.5mm>{試料の有機化合物}\mptLabel{z0+(4.4w,2.5w)}[bl][dist=5mm*dir40,arrowtype=->]<0mm,0.5mm>{CuO}\mptLabel{z1+(-2.5w,0)}[r][dist=5mm*left,arrowtype=->]<-0.5mm,0mm>{CaCl$_2$ 管}\mptLabel{z2+(2.5w,0)}[l][dist=5mm*right,arrowtype=->]<0.5mm,0mm>{ソーダ石灰管}\mptZuLabel{(110w,0)}[br]{元素分析}\end{MPpic}

71

4.12

運動方程式の解と軌跡

この節を読む前に，まず METAPOST マクロ RungeKutta ( p.116 を参照 ) の解説をお読み下さい．
なお，単なる 1 変数の関数についての 1 階または 2 階微分方程式を解くなら，METAPOST マクロ rungekutta ( p.113
を参照 ) の方がお手軽に使えます．

4.12.1

等速円運動

{
→
−
→
−
→
−
q̇1 = p1→→−
d2 x
| v |2 −
dx
等速円運動
=
−
=
p
とすると，
x
——
x
=
q
,
| p |2
1
1
→
−
dt2
dt
ṗ1 = − 1 2 q1
| x |2| q1 |
簡単そうに見えますが，1 周した後ぴったり元に戻ってこないと様にならないので，意外と誤差が目立ちます．( 下図は時間間隔 0.01 で描画しました．0.05 では少し誤差が目立ちます．) 下図で赤の矢印が加速度ベクトル，緑の矢印が速度ベクトルです．

図 124

図 124 のソース

\begin{MPpic}<1cm>(7|5,5.5|1)\sendMP{RungeKutta(-((length(p1)/length(q1))**2)*q1)(0,10,0.01)(5right)(up)(pth);
上で計算した運動の軌跡を現在の単位長に合わせて拡大

pth1:=pth1 scaled w;%

z0=point 0 of pth1; z10=point 0 of pth[-1];% z0 は運動の始点，z10 は初速度
z1 は運動の終 (?) 点
z1=point infinity of pth1;%
z11=point infinity of pth[-1];%

z11 は終 (?) 速度

xfilldraw(red)()

初期位置での加速度矢印

ya(z0,0.7z0,0.3w);%

xfilldraw(green)() ya(z0,z0+1.5w*z10,0.3w);% 初速度矢印
xfilldraw(red)()ya(z1,0.7z1,0.3w);%

終 (?) 点での加速度矢印

xfilldraw(green)() ya(z1,z1+1.5w*z11,0.3w);% 終速度矢印
draw pth1;%

運動の軌跡

for n=0,1: fill circle(z[n],0.3w); endfor %運動する質点の表現 (初期位置，終点)

xdraw(1pt) z1--(0,0)--z0;}%

回転の中心と質点を結んだ\mptZuLabel{(-w,0)}{等速円運動}\end{MPpic}

72

4.12.2

2 本のバネでつるされた重りの運動→ −−→バネの一端を固定した点の位置ベクトルを a1 , a2 とし，バネ定数 ( を重りの質量で割ったもの ) を k , バネの自然→−
長を L0 , 重力加速度を − g とすると，
→
−
→ −
−
→
→ −
−
→
→ −
−
→
→ −
−
→
→
−
d2 x
a1 − xa2 − x= k(|a1 − x | − L0 ) −+ k(|a2 − x | − L0 ) −
− g
→
→
−
→
→
−
2
dt
| a1 − x || a2 − x |下図で赤の曲線が重りの軌跡，緑の矢印が現時刻の速度の向きです．

図 125

図 125 のソース

\begin{MPpic}<1cm>(6|6,1|6)\sendMP{numeric K,L,Lo,g; pair a[]; K:=3; L:=5; Lo:=2; g:=9.8; a1:=(L,0); a2:=(-L,0);
RungeKutta(K*(length(a1-q1)-Lo)*unitvector(a1-q1)+
K*(length(a2-q1)-Lo)*unitvector(a2-q1)-(0,g))(0,6.2,0.05)((2,-5))((0,0))(pth);}上で計算した運動の軌跡を現在の単位長に合わせて拡大\mptPath{ptha}{pth1 scaled w}%

z1 と z2 の中点が原点 (z0)\sendMP{z0=(0,0); z1=(5w,0); z2+z1=2z0;%z3=point infinity of ptha;%z3 は運動の終 (?) 点

z4=point infinity of pth[-1];}%z4 は終 (?) 速度\mptPath{pthb}{unitsquare scaled w shifted z1}%

梁 (?) の表現 (正方形) --- 右上\mptPath{pthc}{(unitsquare shifted left) scaled w shifted z2}% 同上 --- 左上\sendMP{xfilldraw(green)() ya(z3,z3+0.4w*z4,0.3w);%

終速度矢印

for p=pthb,pthc: xfill(0.7white) p; endfor %梁 (?) を灰色で塗りつぶし

xdraw(2pt) subpath (-1,1) of pthb;%
xdraw(2pt) subpath (0,2) of pthc;%

梁 (?) の縁を太く

fill circle(z3,0.2w);%

質点の表現

xdraw(red) ptha;%

運動の軌跡

同上

draw varspring(z1,z3,0.8w,0.5w,9); draw varspring(z2,z3,0.8w,0.5w,9);}% バネの描画\mptZuLabel{(-5w,-5h)}[bl]{2 バネ}\end{MPpic}

73

4.12.3

2 質点系の運動

今度は 2 質点系です．バネでつないだ重りの一方に初速を与えた場合の運動です．
 2−
→
−
→ −
→
−
→ −
→
d x1
x2 − x1= k(|x2 − x1 | − L0 ) −
→ −
→

dt2
| x2 − x1 |
−
→
−
→ −
→

−
→ −
→
d2 x2
x1 − x2


=
k(|
x
−
x
|
−
L
)

1
2
0
−
→ −
→
dt2
| x1 − x2 |初めバネは自然長で，バネの向きと垂直に一方の重りのみに初速度を与えました．赤と青の曲線で，それぞれの重りの軌跡を描いてあります．緑の矢印は速度ベクトルです．

図 126
図 126 のソース

\begin{MPpic}<1cm,1cm>(13|1,5|0.5)\sendMP{numeric Lo,K; pair a[]; Lo:=4; K:=10;
RungeKutta(K*(length(q2-q1)-Lo)*unitvector(q2-q1),K*(length(q2-q1)-Lo)*unitvector(q1-q2))(0,20,0.05)((0,0),(0,4))((1,0),(0,0))(pth);}\mptPath{ptha}{pth1 scaled w}%

質点 1 の軌跡 % 上で計算した運動の軌跡を\mptPath{pthb}{pth2 scaled w}%

質点 2 の軌跡 % 現在の単位長に合わせて拡大\sendMP{z1=point 0 of ptha; z11=point 0 of pth[-1];%

z1 は質点 1 の始点，z11 はその初速度
z2 は質点 2 の始点

z2=point 0 of pthb;%

z3=point infinity of ptha; z13=point infinity of pth[-1];% z3 は質点 1 の終点，z13 はその終速度
z4=point infinity of pthb; z14=point infinity of pth[-2];% z4 は質点 2 の終点，z14 はその終速度
for p=ya(z1,z1+2w*z11,0.3w), ya(z3,z3+2w*z13,0.3w), ya(z4,z4+2w*z14,0.3w):
xfilldraw(green)() p;%
質点 1 初速度，質点 1 終速度，質点 2 終速度
endfor %↓質点 1 の初期位置，質点 2 の初期位置，質点 1 の終点，質点 2 の終点

for n=1,2,3,4: fill circle(z[n],0.2w); endfordraw varspring(z1,z2,0.2w,0.5w,9); draw varspring(z3,z4,0.2w,0.5w,9);% バネの描画
質点 1 の軌跡の描画，質点 2 の軌跡の描画

xdraw(red) ptha; xdraw(blue) pthb;}%\mptZuLabel{(13w,-0.5h)}[br]{2 質点系}
\end{MPpic}

74

4.12.4

ローレンツアトラクター

最後はローレンツアトラクターです．次の 1 階微分方程式の解曲線として得られます．( 1 階ですので pk を使います．) 時間間隔が粗すぎて，動きの大きい部分がちょっとカクカクしてしまいましたが，あまりサンプル ( マニュアル )のタイプセットに時間がかかるのもなんですので，妥協しました．(^_^;> ẋ = a(y − x)
 ṗ1 = a(p2 − p1 )ẏ = bx − y − xz⇐⇒ż = xy − czṗ2 = bp1 − p2 − p1 p3
ṗ3 = p1 p2 − cp3

p1 , p2 , p3 の軌跡 pth[-1] , pth[-2] , pth[-3] を 1 つにまとめ上げ，平面に射影するマクロは projpath です ( 引
数は上記 3 つの軌跡をコンマで区切って列記．) 射影方向は kansuQ などと同様に SetProjDir で指定します．

図 127
図 127 のソース

\begin{MPpic}<1cm>(5|5,8)(0,1)\sendMP{numeric a,b,c; a:=10; b:=28; c:=8/3;
RungeKutta(a*(p2-p1),b*p1-p2-p1*p3,p1*p2-c*p3)(0,10,0.01)(0,0,0)(6,9,20)(pth);% 計算
SetProjDir(3,0,1)(blue);}%射影する方向の指定\mptPath{ptha}{projpath(pth[-1],pth[-2],pth[-3]) scaled 0.2w}% 軌跡を 2 次元へ射影\sendMP{draw ptha; fill circle(point infinity of ptha,0.1w);}% 軌跡の描画，終点の表現\mptZuLabel{(-5w,h)}[bl]{ローレンツ}\end{MPpic}

75

4.13

回

路

図

説明のためとはいえ，ほぼすべての命令を使って書いたので，
何か怪しげな図に．(^_^;;

A
図 128

ウソっぽい回路図

図 128 のソース

\begin{MPpic}<10mm>(0,0|2)(4,2)\sendMP{numeric r,u;
単位長取得

r:=getSymUnit; u:=getLogUnit;%z0=origin; drawIC(z0)(0,5);%IC 描画

LG1a=z0i9; LG1b=z0i2+4u*down; LG1o=z0i10+2u*up; drawLogic1(OR);%OR

draw LG1b--z0i2; draw LG1o--z0i10;%

IC 内の結線

LG2a=z0i3; LG2b=z0i8+4u*up; LG2o=z0i4+2u*down; drawLogic2(AND);%

AND 回路描画

回路描画

IC 内の結線

draw LG2b--z0i8; draw LG2o--z0i4;%
LG3a=z0i7+2u*up; LG3o=z0i6+2u*up;

NOT 回路描画

drawLogic3(NOT);%IC 内の結線

draw LG3a--z0i7; draw LG3o--z0i6;}%\sendMP{pair dw; dw:=4r*down;
R1k=z0o6;

R1a=R1k+dw; drawR1(0);%右下の抵抗描画(IC の 6 番ピンに接続)

C1k=z0o7;

C1a=C1k+dw; drawC1;%

コンデンサ描画(IC の 7 番ピンに接続)

左下のコイル描画 (IC の 10 番ピンに接続)

L1k=z0o10; L1a=L1k+dw; drawL1;%
D1k=L1a;ダイオード描画

D1a=D1k+4r*left; drawD1;%

Tr1e=L1a; Tr2e=C1a; Tr1c=Tr2c=0.5[z0o8,z0o9]+dw; Tr1b=z0o9; Tr2b=z0o8;% トランジスタの端子
drawTr1(N); drawTr2(P); draw R1a -- C1a; draw Tr1c -- Tr1c+r*down;% トランジスタを描き結線
アース線描画

drawGND(Tr1c+r*down);}%\sendMP{E1k=z0o2; E2a=E1a=E1k+5r*up; E2k=E2a+7r*right; %電流計・電池の端子

drawVarEm1("\Large A"); drawE2(2);%電流計・電池の描画

E3k=z0o3; E3a=E3k+3r*up; drawEm3("->45");%検流計の描画C2k=C2a+4r*left=R1a; drawCr2;%

水晶発振器の描画

R2a=C2a; R2k=whatever*up+R2a=z0o5+r*up+whatever*right;%
drawR2; drawCir R2(1.5,1);%

右端の抵抗 (CdS) の端子
右端の抵抗 (CdS) の端子

R3k=E2k; R3a=R3k+whatever*right=R2k+whatever*up; drawR3(6);% 右上の可変抵抗の描画 (矢印は後で)draw z0o5 -- (x0o5,ypart R2k) -- R2k -- R3a;}%IC5 番ピンからの結線
スイッチの描画\sendMP{E4a=D1a; E4k=E4a+11r*up; drawSW4;%

z1o1+7r*down=z1o2=E4k; z1o4=z0o1; z1o3=z0o1+whatever*up=E2a+whatever*left;% トランスの結線
drawTrans(z1)(6,4);%

トランスの描画

C3a-z1i1=C3k-z1i2=2r*left; drawC3; drawVarr C3;%

バリコンの描画

draw z1o3 -- E2a; draw z1i1 -- C3a; draw z1i2 -- C3k;%

いろいろ結線

drawANT(z1o1);}%アンテナの描画\sendMP[2pt]{for zz=L1a,Tr1c,C1a,R1a,R2k,E2a,z1i1,z1i2: drawdot zz; endfor}% 結線箇所に点\sendMP{xdraw("->") E3a -- (xpart R3g,ypart E3a) -- R3g;}%

右上の可変抵抗の矢印\mptZuLabel[label=ウソっぽい回路図,origin=r]{(-3.5w,h)}{回路図}\end{MPpic}
ちなみに，抵抗記号は新タイプ ( IC の 6 番ピンに接続された箱形タイプ ) と旧タイプ ( ギザギザ記号 ) の両方に対応しています．

76

4.14

滴定・pH 曲線，ファンデルワールスの状態方程式
pH

pH

12

12

10

10

8

8

6

6

4

4

2

2

10
図 129

20
30
弱塩基に弱酸10
図 130

HCl mL2030
弱酸に強塩基NaOH mL

図 129 では，1.00 × 10−1 mol/L の濃度で電離定数 Kb = 1.80 × 10−5 mol/L の塩基 10 mL を，5.00 × 10−2 mol/Lの濃度で電離定数 Ka = 1.80 × 10−5 mol/L の酸で中和滴定しています．
図 130 では，1.00 × 10−1 mol/L の濃度で電離定数 Ka = 1.80 × 10−5 mol/L の酸 10 mL を，5.00 × 10−2 mol/L の濃度の強塩基 ( 電離定数 Kb = 1.00 × 109 mol/L としました ) で中和滴定しています．
いずれのグラフでも中和点に印を付けています．
図 129 のソース

\begin{MPpic}<1.5mm,5mm>(40,14|2)
グラフの左下\sendMP{z0=(0,0);%draw ClipPATH(AcidintoBase(z0,w,h)(1.00,-1)(1.80,-5)(10)(5.00,-2)(1.80,-5));% 滴定曲線描画
Tanten(z0ep)(1.5pt);}%\mptDrawTick{10w step 10w until 31w}{h step h until 13.1h}%

中和点に点を打つ
座標軸に目盛を打つ\mptXaxis[t]<0mm,-1mm>{HCl mL} \mptYaxis|0==14h>[r]<-1mm,0mm>{pH}% 横軸と縦軸\mptCoord(10,0)(10,0){3}[t]<0mm,-1mm>{\xcoord}%

座標軸に数値を書き込む (横軸)

\mptCoord(0,2)(0,2){6}[r]<-1mm,0mm>{\ycoord}%

同上 (縦軸)\mptZuLabel[label={弱塩基に弱酸},origin=t]{(20w,-h)}{pH1}\end{MPpic}
図 130 のソース

\begin{MPpic}<1.5mm,5mm>(40,14|2)\sendMP{z0=(0,0);%

グラフの左下draw ClipPATH(BaseintoAcid(z0,w,h)(1.00,-1)(1.80,-5)(10)(5.00,-2)(1.00,9));% 滴定曲線描画
Tanten(z0ep)(1.5pt);}% 中和点に点を打つ\mptDrawTick{10w step 10w until 31w}{h step h until 13.1h}%

座標軸に目盛を打つ\mptXaxis[t]<0mm,-1mm>{NaOH mL} \mptYaxis|0==14h>[r]<-1mm,0mm>{pH}% 横軸と縦軸\mptCoord(10,0)(10,0){3}[t]<0mm,-1mm>{\xcoord}%

座標軸に数値を書き込む (横軸)

\mptCoord(0,2)(0,2){6}[r]<-1mm,0mm>{\ycoord}%

同上 (縦軸)\mptZuLabel[label={弱酸に強塩基},origin=t]{(20w,-h)}{pH2}\end{MPpic}77

図 131 では，1 × 10−1 mol/L の炭酸ナトリウム ( K1 = 1 × 10−7 , K2 = 1 × 10−11 mol/L ) と 5 × 10−2 mol/L の水
酸化ナトリウムを含む水溶液 40 mL を，1 × 10−1 mol/L の塩酸 ( か何か強酸 ) で中和滴定したときの pH 曲線です．
図 132 ではリン酸の電離定数 K1 = 1 × 10−2.2 , K2 = 1 × 10−7.3 , K3 = 1 × 10−12.3 mol/L として，イオン種の組成比をグラフ化したものです．
pH

12
10

H2 PO4 −% H3 PO4

HPO4 2−

PO4 3−

8
6
4
2

2

4

6

8

10

12

pH

図 132

20

40

60
80
図 131

100

HCl mL

図 131 のソース

\begin{MPpic}<0.5mm,5mm>(140,15|2)
グラフの左下\sendMP{z0=(0,0);%draw ClipPATH(Carbonic(z0)(w,h)(1,-1)(1,-7)(1,-11)(5,-2)(40)(1,-1));% 滴定曲線描画
for n=1,2: Tanten(z0ep[n])(1.5pt); endfor}%

第 1 中和点，第 2 中和点に点を打つ\mptDrawTick{20w step 20w until 121w}{h step h until 13.1h}% 座標軸に目盛を打つ\mptXaxis[t]<0mm,-1mm>{HCl mL} \mptYaxis|0==14h>[b]<0mm,0.5mm>{pH}%横軸と縦軸\mptCoord(20,0)(20,0){5}[t]<0mm,-1mm>{\xcoord}%

座標軸に数値を書き込む (横軸)

\mptCoord(0,2)(0,2){6}[r]<-1mm,0mm>{\ycoord}%

同上 (縦軸)\mptZuLabel{(70w,-h)}[t]{pH3}\end{MPpic}
図 132 のソース

\begin{MPpic}<6.7mm>(14,5.5|0.5)(0,-2)
グラフの左下\sendMP{z0=(0,0);%

後で描く曲線の色

color col[]; col0:=black;%

col1:=(0,0.337,0.220); col2:=(0.745,0,0.196); col3=(0,0.318,0.604);
Phosphoric(pth)(z0)(14w,5h)(1,-2.2)(1,-7.3)(1,-12.3);% イオン組成計算
for n=0 upto 3: xdraw(1pt,col[n]) pth[n]; endfor}%上で計算した結果の格納されたパスを描画\mptXaxis[tr]<0mm,-1mm>{pH} \mptYaxis|0==5.5h>[tr]<-1mm,0mm>{\%}% 縦軸と横軸%\mptDrawTick{w step w until 13.1w}{}%

座標軸に目盛を打つ\mptCoord(2,0)(2,0){6}[t]<0mm,-1mm>{\xcoord}%

座標軸に数値を書き込む (横軸)\mptLabel{(0.7w,5h)} [b]<0mm,1mm>{$\mathrm{H_3 PO_4}$}%

イオン種を書き込んだラベル (以下も)\mptLabel{(4.7w,5h)} [b]<0mm,1mm>{\textcolor[rgb]{0,0.337,0.220}{$\mathrm{H_2 PO_4}^-$}}\mptLabel{(9.8w,5h)} [b]<0mm,1mm>{\textcolor[rgb]{0.745,0,0.196}{$\mathrm{H PO_4}^{2-}$}}\mptLabel{(13.4w,5h)}[b]<0mm,1mm>{\textcolor[rgb]{0,0.318,0.604}{$\mathrm{PO_4}^{3-}$}}\mptZuLabel{(5w,-h)}{pH4}\end{MPpic}

78

グラフの目盛りに描画用の座標データを流用する場合，座標が小数だと 図 133 のように，丸め誤差の影響できれいな値になりません．これをきれいに整形するには \mptRound を使います ( 図 134 )．ちなみに，このマクロは \mptCoord

0.99998

水の飽和蒸気圧 [atm]

水の飽和蒸気圧 [atm]の 補正命令 の中に入れて使います．\mptCoord の解説 ( p.89 ) も参照して下さい．

0.79999
0.59999
0.4
0.2
0

0

図 134 のソース

20

40
60
◦
温度 [ C]

80

100
図 133

1.00
0.80
0.60
0.40
0.20
0.00

0

20

40
60
◦
温度 [ C]

80

100
図 134

\begin{MPpic}<0.45mm,35mm>(100|25,1.1|0.2)\mptDrawGrid[xmin=0,xmax=100w,ymin=0,ymax=h,pensize=0.4pt]{0 step 10w until 101w}{0 step 0.1h until 1.01h}\mptCoord(0,0)(20,0){6}[t]<0mm,-1mm>{\xcoord}\mptCoord(0,0)(0,0.2){6}[r]<-1mm,0mm>(\mptRound{2}{\ycoord}){\ycoord}%( ) 内が整形マクロ% 注：↑左図ではこんな感じ \mptCoord(0,0)(0,0.2){6}[r]<-1mm,0mm>{\ycoord}\mptLabel{(50w,-0.15h)}[t]{温度 [${}^\circ$C]}\mptLabel[angle=90]{(-30w,0.5h)}{水の飽和蒸気圧 [atm]}\sendMP{xdraw(1pt) ((0,0.006025)..(20,0.02307)..(40,0.07279)..
(60,0.1966)..(80,0.4672)..(100,1)) xscaled w yscaled h;}% 蒸気圧曲線\mptZuLabel{(100w,-0.2h)}{丸め有り}\end{MPpic}
PV
2.0
nRT

図 135 のソース

H2 (350 K)\begin{MPpic}<0.6mm,2cm>(0,0)(110,2)\small

1.5\sendMP{path p[];p1:=jituzai(350,100,100)("CO2");%CO2 の曲線p2:=jituzai(350,100,100)("H2");%H2 の曲線

SetArea(0,100)(0,2);% 図のサイズ 0 なので範囲設定

1.0
CO2 (350 K)
0.5% 実在気体の曲線描画 ↓for n=1,2: xdraw(0.8pt) ClipPATH(p[n]); endforxdraw(0.4pt,hasen()) (0,h)--(100w,h);% 理想気体
z1=point89of p1; z2=point60of p2;}%
コメント配置点\mptDrawFrame %0.00

上で指定した範囲に枠\mptDrawTick[xmin=0,xmax=2pt,ymin=0,ymax=2pt]%

20

40
60
P [MPa]

図 135
目盛り{20w step 20w until 100.1w}{0.5h step h until 1.6h}\mptCoord(0,0)(20,0){6}[t]<0mm,-1mm>{\xcoord}%

横軸の数値\mptCoord(0,0)(0,0.5){5}[r]<-1mm,0mm>(\mptRound{1}{\ycoord}){\ycoord}% 縦軸の数値\mptLabel{(50w,0)}[t]<0mm,-5mm>{$P$ $[\mathrm{MPa}]$}\mptLabel{(0,2h)}[r]<-6mm,0mm>{$\dis \frac{PV}{nRT}$}\mptLabel{z1}[tl][dist=6mm*dir-45,arrowtype=->]{CO$_2$ (350 K)}\mptLabel{z2}[b][dist=6mm*dir135,arrowtype=->]{H$_2$ (350 K)}\mptZuLabel{(50w,-0.6h)}{実在気体}\end{MPpic}

79

80

100

4.15

エネルギー図C2 H4 + 3O2
53 kJ

2C(黒鉛) + 2H2 + 3O2(394 × 2) kJ

1413 kJ

2CO2 + 2H2 + O2
(286 × 2) kJ

2CO2 + 2H2 O(液)図 136

図 136 のソース

\begin{MPpic}<8mm>(5|5,5|1)\sendMP{SetSt(0upto3)(5.5w,3w,5w,5w)(3h,4h,1.2h,0);%

ステージの幅と高さ指定

x0r=w; x1l=-0.3w; x2r=0.5w; x3=0w;}%

ステージの左右位置指定\mptLabel{z0l}[bl]<0mm,1mm>{$\mathrm{2C(\textgt{黒鉛}) + 2H_2 + 3O_2}$}\mptLabel{z1}[b]<0mm,1mm>{$\mathrm{C_2 H_4 + 3O_2}$}\mptLabel{z2l}[bl]<0mm,1mm>{$\mathrm{2CO_2 + 2H_2 + O_2}$}\mptLabel{z3}[b]<0mm,1mm>{$\mathrm{2CO_2 + 2H_2O(\textgt{液})}$}\sendMP{StAr(0,1)(-0.25)(1/2,2mm)("\textcolor{blue}{53 kJ}")blue;% 矢印とコメント
StAr(1,3)(-0.9)(2/5,2mm)("\textcolor{red}{1413 kJ}")red;
StAr(0,2)(0.7)(1/4,-2mm)("\textcolor{red}{$(394 \times 2)$ kJ}")red;
StAr(2,3)(-0.1)(2/5,-2mm)("\textcolor{red}{$(286 \times 2)$ kJ}")red;
ステージの横線を引く

drawSt(0upto3);}%\mptZuLabel{(0,-h)}[b]{エネルギー図}\end{MPpic}

4.16

化学式

H3 C

CH=CH2

OH
NO2

Cl

H2 N
COOH
CH3 CHCH3
図 137

N

図 138
NH2
H

H
HO
C
CH3

C

N

CH2 =CH

H3 C

CH3

Fe

N
CH2 CH2 COOH

N

図 139
COOH

H3 C
図 137 のソース

CH2 CH2 COOH
図 140

\begin{MPpic}<1cm>(4,1.5|1)
左のベンゼンもどきの点の設定\sendMP{setHex(z0,0); z0h4=(w,0);%drawSB(z0)(1,2,3,5,6); drawDB(z0)(1,3,5);

drawCH(z0)(1a,1b,2);%setHex(z1,0); setHex(z2,0); z1h4=(2.5w,0); z1c2=z2c6;%
drawSB(z1)(1 upto 6);

drawDB(z1)(2,4,6);

左の式描画
右のナフタレンの点の設定

drawSB(z2)(1,2,3,4,6);% 右の式描画

drawDB(z2)(1,3);}\mptZuLabel{(2w,-h)}[b]{化学式 1}\end{MPpic}80図 138 のソース%=========== 置換基を配置しやすいよう TeX 側にも簡単なマクロを ===========\def\mbl#1{\makebox[0mm][l]{#1}}\def\mbr#1{\makebox[0mm][r]{#1}}%=========================================================================\begin{MPpic}<1cm>(2.5|0.5,1.5|1)点の設定とペンの選択\sendMP[0.4pt]{z0h4=(w,0);%benzene(z0)(5,"H$_2$N",4,"\mbr{CH$_3$}C\mbl{HCH$_3$}",% まだ試作品なので
1,"O\mbl{H}",6,"Cl",2,"NO$_2$",3,"COOH");}% 縦向きだけです\mptZuLabel{(1.5w,-h)}[t]{化学式 2}\end{MPpic}
図 139 のソース

\begin{MPpic}<9mm>(3.6|1.9,1.5)(0,-0.5)\small
点の設定するため正四面体を利用\sendMP{SetProjDir(20,90)(blue); SetPolyNone; z1=z0v1;%
Tetrahedron(z0)(w)(-90,180); Tetrahedron(z1)(w)(-90,0);%四面体自体は描かない設定

z0a3=z0v3; z0a4=1.8[z0,z0v4]; z1a3=z1v4; z1a4=1.8[z1,z1v3];}%手前の結合が見にくいので補正
この行から 3 行は化学式の書き込み\mptLabel{z0}{C} \mptLabel{z1}{C}%\mptLabel{z0v2}{C\mbl{H$_3$}} \mptLabel{z0a3}{H}\mptLabel{z1v2}{C\mbl{OOH}}\mptLabel{z0a4}{\mbr{H}O}\mptLabel{z1a3}{N\mbl{H$_2$}} \mptLabel{z1a4}{H}\sendMP{for n=0,1: Bkusabi(0.8[z[n],z[n]a3],0.25[z[n],z[n]a3]);%
Fkusabi(0.25[z[n],z[n]a4],0.75[z[n],z[n]a4]);%

奥向きの結合手前向きの結合draw extLine(z[n],z[n]v2,-0.25,-0.25); endfor % 紙面上の結合
C-C 間の結合

draw extLine(z0,z1,-0.25,-0.25);}%\mptZuLabel{(3w,0)}[t]{化学式 3}\end{MPpic}
図 140 のソース

\begin{MPpic}<1cm>(5.5|5,2|1)(0,-2)
パラメータ設定，線は少し太めに\sendMP[1pt]{setBond(21pt,16.5pt,0.2,0);%for n=1 upto 4:

setPoly(5,z[n],90(n-3)); setHex(z[n+4],90n-45);% 五員環，六員環の頂点設定
z[n]c5=z[n+4]c6;

z[n+4]c2= if n=4: z1c2 else: z[n+1]c2 fi;

endforz1c1+z3c1=(0,0);%↓ 単結合

for n=1 upto 4: drawSBp(5,z[n])(1 upto 5); drawSB(z[n+4])(6,1); drawCH(z[n])(3,4); endfor
drawDBp(5,z1)(2,4); drawDBp(5,z2)(3,5); drawDBp(5,z3)(3); drawDBp(5,z4)(1,3);% 二重結合
二重結合

for n=5,6: drawDB(z[n])(1); drawDB(z[n+2])(6); endfor %draw z1c1--z3c1; draw z2c1--z4c1 dashed withdots;}%

中央の Fe との結合
以下化学式の書き込み\mptLabel{origin}{Fe}%\mptLabel{z1c1}{N} \mptLabel{z2c1}{N} \mptLabel{z3c1}{N} \mptLabel{z4c1}{N}\mptLabel{z1h3}[br]{H$_3$C}\mptLabel{z2h3}[bl]{CH$_3$}\mptLabel{z3h3}[tl]{CH$_2$CH$_2$COOH} \mptLabel{z4h3}[tr]{H$_3$C}\mptLabel{z1h4}[bl]{CH=CH$_2$}\mptLabel{z2h4}[tl]{CH$_2$CH$_2$COOH}\mptLabel{z3h4}[tr]{H$_3$C}\mptLabel{z4h4}[br]{CH$_2=$CH}\mptZuLabel{(0,-3.6h)}[b]{化学式 4}\end{MPpic}

81

4.17

結晶格子

図 141

S2−
Zn2+

図 141 のソース

\begin{MPpic}<25mm>(5.2|1.4,1.2|2.3)\sendMP{mptBallgrad:=8;%
グラデーションの分割数を設定 (球は小さいので少なめで十分)
SetVarProjDir(0.7dir-150)(right)(up);bccFrame;%

体心立方格子 (枠型)

SetProjDir(10,30)(blue)(2w,0);

NaClCut;%

岩塩型結晶 (切断型)

ProjOrigin(4w*right); CrstLength:=w/2; hcpBall;%

六方最密構造 (球型)

CrstLength:=w; ProjOrigin(0,-1.7h);

閃亜鉛鉱型結晶 (枠型)

ZnSFrame;%def mpthen = _mpthen(0,0)() enddef;%

枠型の線種変更

def mptHen = _mpthen(0.4pt,1.8pt)(dashed hasen()) enddef;%

枠型の線種変更

VarProjOrigin(2w,-1.7h);

蛍石型結晶 (枠型)

CaFFFrame;%

SetVarProjDir(0.45dir-160)(2/3,0)(0,(4sqrt6)/9)(4w,-1.7h); hcpFrame;% 六方最密構造 (枠型)
ionOption(-1.3w,-1.3h); IONOption(-1.3w,-h);}%説明のための球\mptLabel{(-w,-1.3h)}{Zn$^{2+}$} \mptLabel{(-w,-h)}{S$^{2-}$}%

説明\mptZuLabel{(-1.2w,-0.4h)}{結晶}\end{MPpic}

82

4.18

elementary.mp — 軌跡追跡型の描画

動点に移動命令を与え，その点の軌跡として図を描くマクロ群です．鉛筆で絵を描く様に似ているので，座標の概念を習っていない小学生にも比較的理解しやすいのでは，と思います．LOGO という描画ソフトと同じ発想です∗57 ．小学
生向きということで，命令も原則ローマ字です．
まず 1 つ目．
「前に進んで，ちょっと戻り，向きを変える」を 10 回繰り返しました．
進む距離はだんだん短くなるようにしました．
図 142 のソース

\begin{MPpic}<10mm>(5.2,0)(0,5)\openMP%%%%%%%%%%%%%%%%%%%%%%% マクロや定数 %%%%%%%%%%%%%%%%%%%%%%
緑色の定義

NAMAE MIDORI = hsb(0.43,1,0.71) OWARI;%

EDA:=100;% 進む距離の初期値 (単位をつけてないときは bp 単位)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%HAZIME;% ←いろいろ初期化↓ 繰り返し (パスの形成)

KURIKAESI(10)(MAE EDA; USIRO 0.3EDA; MIGI 30; EDA:=0.8EDA;)
描画色の設定IRO W.MIDORI;%

図 142

描画

WAKU;%\closeMP\mptZu(2.5,0)[t]{}{行き戻る}% オリジナルモードや \finishMP の後では\mptZuLabel ではなく \mptZu を使う\end{MPpic}%

2 つ目．塗りつぶしの例です．塗る部分をだんだん小さくしながら色を変えていくことにより，グラデーションになっています．
図 143 のソース

\begin{MPpic}<10mm>(3|3,0)(0,8)\openMP%%%%%%%%%%%%%%%%%%%%%%%%% マクロや定数 %%%%%%%%%%%%%%%%%%%%%%%%%NAMAE KURO

= hsb(0,0,0)

OWARI;% 黒|black などでも

NAMAE KI= hsb(0.15,1,0.89) OWARI;% 黄|いいけどちょっとNAMAE KIMIDORI = hsb(0.17,1,0.75) OWARI;% 黄緑|凝ってみました．
NAMAE AKANAMAE HANANOIRO= hsb(0.97,1,0.75) OWARI;% 赤
OWARI;% 花の色

HIKISU B = (B/70)[KI,AKA]

NAMAE HAPPANOIRO HIKISU B = hsb(0.43,1,0.71-B/200) OWARI;% 葉の色
KOTOBA HAPPA HIKISU OKISA =%図 143

葉っぱと花びらのパスをつくるマクロ

CURVE(MAE OKISA; MIGI 90; MAE OKISA;);MIGI 90;

CURVE(MAE OKISA; MIGI 90; MAE OKISA;);MIGI 90;

OWARI;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%HAZIME; MAE 5; HOZON;%

初期化後，ペンの太さの分茎がはみ出ないよう少し移動し，パスを再度リセット

PENSIZE 10; IRO W.KIMIDORI; MAE 195; WAKU;%

描画色を黄緑に，ペンを太くし，茎を描画

HOZON; PENSIZE 2;%

パスをリセットし，ペンを細く

KAI:=60;%
KURIKAESI(25)%

花びらのサイズを表す変数

25 回に渡ってだんだん小さく花びら (10 枚) を塗る
サイズ縮小・色設定(KAI:=KAI-2; IRO HANANOIRO KAI;%KURIKAESI(10)(HAPPA KAI; HIDARI 36;) NURU; HOZON;)% 花びら 10 枚パス作成, 塗る, パスリセット
USIRO 200; HOZON;%

後ろ (根本) に戻って，パスをリセット

KAI:=60;%

葉っぱのサイズを表す変数 (以下花びらと同様)∗57 というより，「LOGO みたいな方式で図を描けるマクロがほしい」と小学校の先生に言われて作りました．もっとも，LOGO のエミュレートが目的ではありませんので，似ているような似ていないような感じになりました．

83

KURIKAESI(50)(KAI:=KAI-1; IRO HAPPANOIRO KAI;HAPPA KAI; HIDARI 90; HAPPA KAI; MIGI 90; NURU; HOZON;)\closeMP\mptZu(3,3)[r]<0mm,-1mm>{}{花}\end{MPpic}
最後は，円の面積の小学校風「証明」によく使われる図です．( さすがに三角関数を使ってしまいましたが．)
図 144 のソース

\begin{MPpic}<5mm>(0,0)(8,41)\openMP%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% マクロや定数 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%= hsb(0.97,1,0.75) OWARI;% 赤

NAMAE AKAOWARI;% 黒NAMAE KURO = hsb(0,0,0)= hsb(0.57,1,0.71) OWARI;% 青

NAMAE AO%---------------------------------------------------------------------------------------KOTOBA OGI(HIKISU R,NN) = %扇形取得 R は半径，NN は分割数の半分
MIGI 90; MAE R; HIDARI 90; CURVE(MIGI 90; USIRO R; HIDARI (180/NN); MAE R; HIDARI 90;);
MIGI 90; USIRO R; HOZON OGIGATA;OWARI;%---------------------------------------------------------------------------------------円分割 R は半径，NN は分割数の半分

KOTOBA ENBUNKATU(HIKISU R,NN) = %IRO W.KURO; IRO N.AKA;HANPUKU M=0 KARA NN-1: WNURU (OGIGATA KAITEN (M/NN*180)); KOKOMADE %円の上半分の描画

IRO N.AO;
HANPUKU M=0 KARA NN-1: WNURU (OGIGATA KAITEN (M/NN*180+180)); KOKOMADE % 下半分
OWARI;%---------------------------------------------------------------------------------------組立て R は半径，NN は分割数の半分

KOTOBA KUMITATE(HIKISU R,NN) = %IRO W.KURO; IRO N.AKA;HANPUKU M=0 KARA NN-1:

WNURU (OGIGATA KAITEN (90-90/NN) HEIKOIDO(2M*R*sind(90/NN),0));
KOKOMADEIRO N.AO;
HANPUKU M=0 KARA NN-1:
WNURU (OGIGATA KAITEN (-90-90/NN) HEIKOIDO((2M+1)*R*sind(90/NN),R*cosd(90/NN)));
KOKOMADEOWARI;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%HAZIME; OGI(50,8); %初期化し扇形のパスを取得

ENBUNKATU(50,8);%
GAZO EN;%

扇形を塗る

SYOKYO;%

一旦消去

KUMITATE(50,8);%

切った円を組んだ図を描く

GAZO KUMI;%

画像を picture 値変数 KUMI に保存

SYOKYO;%

再度消去

図 144

画像を picture 値変数 EN に保存

TUIKA EN HEIKOIDO(0,75);% 保存した画像を適当な位置に描画
TUIKA KUMI HEIKOIDO(-75,-50);\closeMP\mptZu(7,7)[tr]{}{elementary}\end{MPpic}
84