Prapodivny vysledek METAPOSTu

Jan Houstek Jan.Houstek at st.ms.mff.cuni.cz
Sat Jan 5 11:40:43 CET 2002


> snažím se vytvořit svůj první obrázek v METAPOSTu

přeji mnoho úspěchů :-)

> být ve štítě, a pak jsem chtěl vytvořit jeho zrcadlovou podobu
> pomocí reflectedabout (z14,z15), ale nějak se mi nepovedlo

měl jste tam chybu v určení těch bodů, teď už to funguje

> body najít. Tak jsem zkusil rotated a shifted, ale tam jsem došel
> k velice prapodivné konstantě 19.17, kterou jsem si našel metodou

rotated otáčí kolem počátku, vy jste potřeboval rotatedaround

> Nenapadá Vás někoho, kde se tahle podivnost objevila (myslel jsem
> si, že texmf používají jenom celočíselnou aritmetiku, takže by

Ano, i metapost počítá celočíselně a proto je třeba dávat pozor na
zaokrouhlovací chyby. Většinou je vše v pořádku, ale když se něco kazí,
pravděpodobně jste se někde v mezivýpočtu přiblížil 1/65536.

> Mimochodem, trochu se motám v orientaci a znaménkách. Bylo by daleko
> pohodlnější, kdybych šoupnul bod [0,0] někam do rohu obrázku, ale
> nevím jak na to. Poradíte mi někdo?

origin můžete mít kdekoliv, prostě nakreslíte obrázek relativně vzhledem k
originu a metapost pak jen dopočítá bounding box. Například u erb.mp by
bylo asi nejjednodušší mít origin ve středu kříže.

Jinak jsem ten zdroják trošku přepsal, abych vám začátky s Metapostem
trošku usnadnil. Jesti něco není jasné, klidně se ptejte.

-- 
Honza Houstek
-------------- next part --------------
prologues := 1;

sirka_erbu := 5 cm;
oblouk := sirka_erbu / 5;
sirka_krize := 0.75sirka_erbu;
posun_krize := oblouk / 2;
r_obloucku := sirka_krize / 18;

beginfig(1);

path p[]; picture obrazek[];
pickup pensquare scaled 0.25pt;

z1=origin;		% pocatek
z2=sirka_erbu*right;	% right je totez co (1,0) nebo dir0
z3=sirka_erbu*(1,-1);	% zde by slo i sqrt(2)*dir-45, ale to by nebylo hezke
z4=sirka_erbu*down;
z5=.5[z3,z4]+oblouk*down;	% t[z1,z2] je totez jako (1-t)*z1+t*z2
p1:=z1--z2--z3..z5..z4--cycle;

z6=.5[z1,z3]+posun_krize*down; % stred krize
z7=z6+.5sirka_krize*up;
z9=z7+(sirka_krize/6+r_obloucku)*right;
z10=z9+r_obloucku *(-1,-1);
z11=z6+sirka_krize/6*(1,1);
p2=z6--z7--z9..z10--z11--cycle;	% nahore vpravo
p3=p2 reflectedabout (z6,z7); 	% nahore vlevo

p4 = p2 reflectedabout (z11,z6);
p5 = p4 reflectedabout (z6,z6-sirka_krize*left);

% great transformation of half of the cross

obrazek1 = image(
	fill p2 withcolor red;  draw p2;
	fill p3 withcolor blue; draw p3;
	fill p4 withcolor red;  draw p4;
	fill p5 withcolor blue; draw p5;
);

obrazek2=obrazek1 rotatedaround(z6,180);
% druha moznost, ktera taky funguje
% obrazek2=obrazek1 reflectedabout (z6,z6+sirka_krize*dir135);

fill p1 withcolor (255,215,0); % to ma byt zlata
draw p1 ;

draw obrazek1;
draw obrazek2;

endfig;
end


More information about the csTeX mailing list