Na pierwszy ogień poszedł MetaPost i jak się okazało świetnie się do tego nadaje. Wystarczyła w sumie prosta pętelka (właściwie to dwie) for i wszystko ładnie wyszło. Oto kod odpowiedzialny za cieniowanie:
for i=0 upto width/2: draw (x,y-i*2)--(x+i*2,y); endfor for i=1 upto width/2: draw (x+i*2,y2)--(x2,y - i*2); endfor
Koncepcja jest bardzo prosta. Jeżeli mamy kwadrat do wykreskowania to dzielimy go na dwie części wzdłuż przekątnej, która będzie również kreską. Dzielimy go z tego powodu, że długości kresek rosną do połowy kwadratu a później maleją. Stąd potrzebne są również dwie pętle.
Druga rzecz to pozioma klamra. Długo się naszukałem jak to zrobić więc jak już w końcu znalazłem to się tą wiedzą podzielę. Cały trick polega na wyrenderowaniu zwykłej klamry z czcionki, rozciągnięcie jej i obrócenie. Kod:
label.bot(btex $\lbrace$ etex xscaled 1.5 yscaled 15 rotated 90, (x,y));
Na koniec zamieszczam cały kod jak wygenerować obrazek przedstawiony powyżej:
prologues:=3; verbatimtex %&latex \documentclass{minimal} \begin{document} etex beginfig(0); s:=20; draw (350,s+25)--(350,s+125)--(500,s+125)--(500,s+25)--cycle; draw (350,s+125)--(400,s+75)--(400,s+25); draw (400,s+75)--(450,s+25); draw (350,s+75)--(500,s+75) dashed evenly scaled 2; label.lft(btex $m/2$ etex, (350,s+100)); label.lft(btex $m/2$ etex, (350,s+50)); label.top(btex $p$ etex, (425,s+125)); label(btex $H$ etex, (450,s+100)); label(btex $U_2$ etex, (475,s+50)); for i=0 upto 25: draw (350+i,s+125-i)--(350,s+125-i*2); endfor for i=1 upto 25: draw (375+i,s+100-i)--(350+i*2,s+75); endfor for i=0 upto 25: draw (350,s+75-i*2)--(350+i*2,s+75); endfor for i=1 upto 25: draw (350+i*2,s+25)--(400,s+75 - i*2); endfor for i=0 upto 25: draw (400+i,s+75-i)--(400,s+75-i*2); endfor for i=1 upto 25: draw (425+i,s+50-i)--(400+i*2,s+25); endfor s:= 40; label.bot(btex $\lbrace$ etex xscaled 1.5 yscaled 15 rotated 90, (425,s)); labeloffset:=5.5mm; label.bot(btex $U$ etex, (425,s)); endfig; end
Brak komentarzy:
Prześlij komentarz