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