Saya akan sentuh berkenaan Graphic buffers
dalam siaran kali ini.
Apa kegunaan penampan grafik ini? Ianya sangat berguna dalam penyediaan sebuah dokumentasi kerana kod-kodnya boleh digunakan untuk dua benda; paparan kod dan juga hasil grafiknya.
Coretan kod (code snippet) ini diletakkan di dalam penampan
(buffer), dan ia boleh diulangguna kemudiannya.
Terdapat tiga kod arahan yang boleh digunakan setelah menyediakan coretan kod dalam penampan
ini iaitu \typebuffer
, \getbuffer
dan juga \processMPbuffer
.
Saya sediakan contoh kod di bawah dengan menggunakan data bintang pecah 14 yang terdapat pada Jalur Gemilang Malaysia:-
1\startenvironment metafun-environment-layout
2\useMPlibrary[clp,txt]
3\definepapersize[mine][width=21cm,height=29.7cm]
4\setuppapersize[mine][A4,portrait]
5\setuplayout[topspace=.5in,backspace=.75in,
6 header=18pt,headerdistance=4em,
7 footer=16pt,footerdistance=0em,
8 height=middle,width=middle]
9\startmode[print]
10 \setuppapersize[mine][mine]
11\stopmode
12\setupbodyfont[dejavu,8pt]
13\setupheadertexts[{\tfc \CONTEXT\ LMTX\hfill \bf Bintang Pecah 14}]
14\setupbackgrounds[header][text][bottomframe=on]
15\setupbackgrounds[footer][text][topframe=on]
16\setupinteraction[state=start]
17\useURL[lesen][https://creativecommons.org/licenses/by-nc/4.0/][][Atribusi-BukanKomersial 4.0 Antarabangsa Creative Commons.]
18\setupfootertexts[\leftaligned{\tfa Lesen: \from[lesen]}]
19%\setuptyping[margin=standard,blank=halfline]
20\setuppagenumbering[location={right},style=bold]
21\definefontfeature[mathextra][italicwidths=yes]
22\definecolor[kuning][c=0,m=.09,y=1,k=0]
23
24\defineoverlay[WatermarkOverlay]
25 [{\framed[frame=off,foregroundcolor=lightcyan]
26 {\scale[sx=3.5,sy=3.5]
27 {\rotate[rotation=10]{Oleh: Pn. WRaihan.WS}}}}]
28\setupbackgrounds[page][background=WatermarkOverlay]
29
30\starttext
31\section{\tfd KOORDINAT ANGGARAN:-}
32
33\startbuffer[a]
34\startMPcode
35 picture BintangPecahSatu; BintangPecahSatu := image (
36 pair A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T,
37 U, V, W, X, Y, Z, Za, Zb;
38
39 A:=( 1.00cm, 0 cm); H:=(- 0 cm, 2.50cm);
40 O:=(-1.00cm, -0 cm); V:=( 0 cm,-2.50cm);
41
42 B:=( 2.44cm, .56cm); C:=( .90cm, .43cm); D:=( 1.96cm, 1.56cm);
43 N:=(-2.44cm, .56cm); M:=(- .90cm, .43cm); L:=(-1.96cm, 1.56cm);
44 P:=(-2.44cm,-.56cm); Q:=(- .90cm,- .43cm); R:=(-1.96cm,-1.56cm);
45 Zb:=( 2.44cm,-.56cm); Za:=( .90cm,- .43cm); Z:=( 1.96cm,-1.56cm);
46
47 E:=( .62cm, .78cm); F:=( 1.09cm, 2.25cm); G:=( .22cm, .98cm);
48 K:=(- .62cm, .78cm); J:=(-1.09cm, 2.25cm); I:=( -.22cm, .98cm);
49 S:=(- .62cm,-.78cm); T:=(-1.09cm,-2.25cm); U:=( -.22cm,- .98cm);
50 Y:=( .62cm,-.78cm); X:=( 1.09cm,-2.25cm); W:=( .22cm,- .98cm);
51
52 fill A--B--C--D--E--F--G--H--I--J--K--L--M--N--O--P--Q--R--S--T--U
53 --V--W--X--Y--Z--Za--Zb--cycle withcolor \MPcolor{kuning};
54
55 draw A--B--C--D--E--F--G--H--I--J--K--L--M--N--O--P--Q--R--S--T--U
56 --V--W--X--Y--Z--Za--Zb--cycle withpen pencircle scaled 1pt;
57
58 drawpoints A--B--C--D--E--F--G--H--I--J--K--L--M--N--O--P--Q--R--S
59 --T--U--V--W--X--Y--Z--Za--Zb--cycle withpen pencircle scaled 4bp;
60
61 label.rt ( "A",2.57A); label.rt ("B", B); label.rt ( "C",2.5 C);
62 label.rt ( "D", D); label.rt ("E",2.5 E); label.top( "F",1.03F);
63 label.top( "G",2.55G); label.top("H",1.02H); label.top( "I",2.57I);
64 label.top( "J",1.04J); label.lft("K",2.57K); label.lft( "L",1.04L);
65 label.lft( "M",2.5 M); label.lft("N", N); label.lft( "O",2.47O);
66 label.lft( "P", P); label.lft("Q",2.5 Q); label.lft( "R", R);
67 label.lft( "S",2.55S); label.bot("T",1.03T); label.bot( "U",2.55U);
68 label.bot( "V",1.02V); label.bot("W",2.55W); label.bot( "X",1.03X);
69 label.rt ( "Y",2.55Y); label.rt ("Z", Z); label.rt ("Za",2.5Za);
70 label.rt ("Zb", Zb); z0=(0, 0); dotlabel.top("(0, 0)",z0);
71 ) scaled .75; draw BintangPecahSatu;
72\stopMPcode
73\stopbuffer
74
75\blank[2*big]
76\tfb \typebuffer[a]
77\startlinecorrection[blank]
78\placefigure{}{\getbuffer[a]}
79\stoplinecorrection
80
81\startbuffer[b]
82 picture BintangPecahDua; BintangPecahDua := image (
83 a = 1.00cm; b = 2.50cm; z01 = -z15 = (a, 0); -z08 = z22 = (0, -b);
84 c = 2.44cm; d = .56cm; z02 = -z16 = (c, d); -z14 = z28 = (c, -d);
85 e = .90cm; f = .43cm; z03 = -z17 = (e, f); -z13 = z27 = (e, -f);
86 g = 1.96cm; h = 1.56cm; z04 = -z18 = (g, h); -z12 = z26 = (g, -h);
87 i = .62cm; j = .78cm; z05 = -z19 = (i, j); -z11 = z25 = (i, -j);
88 k = 1.09cm; l = 2.25cm; z06 = -z20 = (k, l); -z10 = z24 = (k, -l);
89 m = .22cm; n = .98cm; z07 = -z21 = (m, n); -z09 = z23 = (m, -n);
90
91 drawoptions(withpen pencircle scaled 1.5pt);
92 drawfill z01..z02..z03..z04..z05..z06..z07..z08..z09..z10..z11..z12
93 ..z13..z14..z15..z16..z17..z18..z19..z20..z21..z22..z23..z24..z25
94 ..z26..z27..z28..cycle withcolor transparent(1, .75, blue);
95 ) scaled .75; draw BintangPecahDua;
96\stopbuffer
97
98\startbuffer[c]
99 def star (expr size, n, pos) =
100 for a = 1 step 360/n until round(360*(1-0/n)) :
101 draw (origin--(size/2, 0) rotated 90)
102 rotatedaround (origin, a) shifted pos
103 withpen pencircle scaled .33cm withcolor \MPcolor{kuning};
104 endfor;
105 enddef;
106
107 star(3.5cm, 14, origin);
108\stopbuffer
109
110\page
111\section{\tfd VERSI LAIN:-}
112\blank[2*big]
113\tfb \typebuffer[b]
114\startlinecorrection[blank]
115\placefigure{}{\processMPbuffer[b]}
116\stoplinecorrection
117
118\blank[3*big]
119\section{\tfd MELAKAR BINTANG:-}
120\blank[2*big]
121\tfb \typebuffer[c]
122\startlinecorrection[blank]
123\placefigure{}{\processMPbuffer[c]}
124\stoplinecorrection
125
126\stoptext
127\stopenvironment
Perhatikan baris-baris yang telah diserlahkan. Terdapat tiga penampan yang disediakan; penampan a (\startbuffer[a]
), penampan b (\startbuffer[b]
) dan penampan c (\startbuffer[c]
).
\typebuffer
. Fungsi \typebuffer
ini sama seperti fungsi arahan \starttyping
.\getbuffer
digunakan untuk menghasilkan grafik daripada kod-kod diberi. Ambil perhatian kepada arahan MetaPost
seperti \startMPcode
& \stopMPcode
yang diletakkan di dalam penampan. Ianya memang diperlukan sekiranya menggunakan arahan \getbuffer
ini.\processMPbuffer
pula, arahan seperti \startMPcode
atau \startuseMPgraphic
mesti ditinggalkan. Terus maju kepada arahan makro
dan pembolehubah MetaPost
untuk penghasilan grafik.penampan a
:penampan b
dan penampan c
:Berikut ialah data untuk bintang pecah mengikut Persamaan Parametrik bagi Bulatan
di mana sudut 360° dibahagikan kepada 28 pecahan. Unjuran pula bersaiz 1cm per unit yang kemudiannya dikecilkan skalanya kepada 75% untuk memuatkan lukisan ke dalam kertas bersaiz A4.
Kod Sumber: Data / PDF: data.pdf, alternatif
Data Persamaan Parametrik
ini dibundarkan kepada dua titik perpuluhan.
Untuk kod Jalur Gemilang, sila rujuk siaran saya selepas ini. Pautannya ada disediakan di bawah.
*Diubahsuai dari Manual MetaFun di halaman 118.
PENAFIAN: Imej berbentuk lengkungan melalui Persamaan Parametrik yang begitu cantik ini diambil dari laman Facebook
[Life Through a Mathematician's Eyes]. Sejujurnya, saya amat mengharapkan agar dapat melukis fungsi Persamaan Parametrik sebegini berdasarkan contoh yang diberikan oleh Pragma ADE (imej keempat di atas). Namun buat masa ini, saya masih belum berjaya mencapainya. | ![]() |