Versió pdf (en anglès)
El programa mosaic és una eina per dibuixar mosaics. La idea era de reproduir els mosaics àrabs de l'Alhambra. El programa pot dibuixar circumferències, línies i punts com a intersecció de línies o circumferències, com es faria amb un regle i un compàs. El programa llegeix una definició gomètrica de la cel·la base, rota i copia la cel·la base per crear la cel·la del mosaic, que es dibuixa en els punts de la malla que defineix el mosaic. Va ser inspirat pel llibre d'Eric Broug Islamic Geometric Patterns.
El programa mosaic està escrit en Fortran 90 i usa les rutines de la llibreria PGPlot i algunes eines de ImageMagick. Podeu trobar una col·leció de mosaics dibuixats amb mosaic a la pàgina principal. Els mosaic mostrats inclouen els 19 dissenys del llibre de Broug, alguns altres dissenys del mateix autor, mosaics fotografiats a l'Alhambra en diferents ocasions, mosaics vistos en un viatge al Marroc i altres mosaics fets a partir d'imatges trobades a llibres i a l'Internet.
Descarregueu els fitxers mosaic.f90 i mosaic_help.txt. Per compilar mosaic en una màquina Linux o Mac OS X, entreu la instrucció
gfortran mosaic.f90 -o mosaic -l pgplot
Per córrer mosaic, entreu la instrucció
mosaic [<opcions>] [<file>[.def]|<file>.dbg]
Opcions generals:
-c(ckeck): comprova i dibuixa els entrellaços un a un. Els punts de creuament entre entrellaços apareixen marcats.
-d (debug): les línies del fitxer <file>.def són executades i dibuixades una a una. Es crea el fitxer <file>.dbg (vegeu més avall).
-e:edit. Obre <file>.def, executa totes les instruccions (com en el mode debug, però sense parar a cada instrucció) i espera una entrada des del teclat:
Intro: rellegeix el fitxer def i executa qualsevol modificació feta a,b un editor extern.
Ctrl-D (EOF): acaba i dibuixa el mosaic.
-f (files): no es creen els fitxers pdf, png, o <file>_anim.gif. Només es crea el fitxer eps i no es fa la conversió a pdf o png. En mode d'animació, els fitxers temporals no es converteixen a gif.
-g (grafic): interfície gràfica per a la construcció d'àrees i entrellaços. Es dibuixen tots els punts definits, que es poden seleccionar amb el cursor per crear una àrea o entrellaç. Les àrees i entrellaços creats s'escriuen al fitxer <file>_graph.def, que es pot afegir (després d'editar-lo si cal) al fitxer original de definició <file>.def.
-h (help): mostra el fitxer mosaic_help.txt i surt.
-i (interactiu): les definicions s'entren amb el teclat, es dibuixen i es guarden al fitxer mosaic_interactive.def.
-s <size>: size. No té en compte la grandària donada en el fitxer def i fa servir en canvi <size>.
Opcions d'animació
-a (animació): construcció de punts, lìnies, arcs circulars, àrees i entrellaços animada. Es dibuixen els elements un a un i es van guardant en fitxers temporals eps. Finalment, els fitxers eps es converteixen a fitxers temporals gif, amb els què es crea un fitxer gif animat, <file>_anim.gif. Es pot combinar amb -z.
-k (keep): es guarden el fitxers temporals.
-t <delay> (temps): interval entre imatges del gif animat, en centèssimes de segon. Per defecte, 10.
-z (zoom): animació, com per a l'opció -a, però per a un zoom des de SZ 1 fins a la grandària final. Es pot combinar amb -a.
Argument (opcional):
un dels següents:
<file>[.def]: fitxer de definició (l'extensió .def es pot ometre).
<file>.dbg: fitxer ASCII creat per mosaic en mode debug, amb les coordenades de tots els punts; punts i angles de pendent de les línies; centres, radis i angles dels arcs circulars; colors, punts i costats de les àrees; punts, amplada, i informació dels creuaments per-sobre-per-sota dels entrellaços. El fitxer es pot editar per fer ajustos fins.
Totes les instruccions poden ser en majúscules o minúscules. Per claretat, es mostren en majúscules. Els paràmetres es mostren en minúscules. Tots els angles son en graus, en sentit antihorari des de l'eix x.
El fitxer de definició té 4 seccions, en aquest ordre:
Global: paràmetres globals, que s'han de definir primer (TI, SY, SZ, VG),
Paràmetres, debug: paràmetres del mosaic que es poden canviar a qualsevol lloc (FA, TV, RC, CO, Qn, WR),
Definicions: definició de punts, línies i arcs circulars (Pn, ME, ST, S6, S8, Ln, Cn),
Construcció: Construcció d'àrees i entrellaços de la rajola base (AC, CH, CV, An, Dn, Gn, IW, IC, IF, In).
TI "Títol" !Definició del títol del mosaic. Per defecte "mosaic".
Exemple:
TI "Exemple de mosaic"
SY n !Definició de l'ordre de la simetria rotacional del mosaic (invariància per una rotació de 360/n graus). SY pot ser només 1, 2, 3, 4 o 6.
Exemple:
SY 4
Les quatre cantonades (BLC, BRC, TLC, TRC) de la cel·la base per a cada simetria són:
SY BLC BRC TLC TRC
___ _______ ____________ ____________ ___________
1 (0, 0) (1, 0) (0, 1) (1, 1)
2 (0, −1) (1, -1) (0, 1) (1, 1)
3 (0, 0) (√3/2, −1/2) (0, 1) (√3/2, 1/2)
4 (0, 0) (1, 0) (0, 1) (1, 1)
6 (0, 0) (√3/2, 0) (√3/4, r3/2) (√3/2, 1/2)
La cel·la base es rota k × (360/n), k = 0 . . . n − 1 per obtenir la cel·la del mosaic. Per defecte, les cel·les del mosaic per a cada simetria són (vegeu Figs. 1 i 2):
SY 1: quadrat de costat 1, [0, 1] × [0, 1]
SY 2, 4: quadrat centrat de costat 2, [−1, 1] × [−1, 1]
SY 3, 6: hexàgon centrat de costat 1
Fig.1. Cel·la base, punts, linies i arcs circulars per defecte per a diferents simetries rotacionals.
Fig. 2: Cel·la base (en blau) i cel·la del mosaic (en negre) per a diferents simetries rotacionals.
SZ n !Definició de la grandària del mosaic . Es dibuixa una malla d'aproximadament n × n cel·les del mosaic (valor per defecte = 1). Per a SZ ≤ 0 només es dibuixa la cel·la base. La grandària s'ha de definir després de definir la simetria
Exemple:
SZ 4.5
Fig. 3: Exemple per a SY = 4. Cel·la base
Cel·la del mosaic
SZ = 1, mosaic complet, igual que la cel·la del mosaic
SZ = 2, mosaic complet
Fig. 4: Exemple per a SY = 6. Cel·la base
Cel·la del mosaic
SZ = 1, mosaic complet
SZ = 2, mosaic complet
VG ux uy vx vy wx wy !Definició dels vectors que determinen la malla (vectors de translació del mosaic), u = (ux, uy), v = (vx, vy), w = (wx, wy).
Exemple:
VG 1 0 0 1.5 0.2 0.2
Es tessel·la el pla amb cel·les del mosaic a les posicions
iu + jv + w = (i ux + j vx + wx, i uy + j vy + wy)
El valor per defecte del vector desplaçament inicial w és (0, 0). Els valors per defecte per a u i v són valors estàndar per a la cel·la base per defecte de cada simetria:
SY u v w
____ ____________________ __________________________ ______
1 (1, 0) (0, 1) (0, 0)
2, 4 (2, 0) (0, 2) (0, 0)
3, 6 (√3, 0) = (1.732, 0) (√3/2, 3/2) = (0.866, 1.5) (0, 0)
Fig. 5: Cel·la del mosaic i vectors u, v per defecte, que determinen la malla (línies gruixudes) per a diferents simetries rotacionals. També es mostra la tessel·lació d'unes quantes cel·les del mosaic (línies fines).
FA Ln !Definició de la línia Ln (definida prèviament) com a eix de simetria (axial). Definició vàlida fins que es canvii. Es pot canviar en qualsevol secció (per defecte, FA L0, bisectriu de la cel·la base; vegeu 3.1.2).
Exemple:
FA L5
TV [Pn Pm | ux uy] !Definició del vector de translació que transforma Pn en Pm o el vector (ux, uy). Definició vàlida fins que es canvii. Es pot canviar en qualsevol secció. Per defecte, TV (0, 0).
Exemples:
TV P1 P4
TV 0.5 0
RC [Pn | X x y] A a !Definició del centre de rotació i l'angle (sentit antihorari). Per defecte, centre (0, 0), angle 0.
Exemples:
RC P1 A 30
RC X 0.5 0.5 A -45
CO c r g b !Definició del color d'índex c (0 - 15) com a (r, g, b), 0 ≤ r, g, b ≤ 1
Exemple:
CO 3 0 0.5 0
Els colors per defecte són (vegeu Fig. 6):
CO r g b Descipció
___ ______ _____ _____ _______________
0 (1.0, 1.0, 1.0) blanc
1 (0.0, 0.0, 0.0) negre
2 (1.0, 0.0, 0.0) vermell intens
3 (0.0, 1.0, 0.0) verd intens
4 (0.0, 0.0, 1.0) blau intens
5 (0.5, 0.8, 0.8) blau cel o cian
6 (0.8, 0.6, 0.6) magenta
7 (0.95, 0.9, 0.7) groc pàlid
8 (0.9, 0.4, 0.0) taronja fosc
9 (0.95, 0.8, 0.1) groc daurat
10 (0.3, 0.8, 0.5) verd pàlid
11 (0.0, 0.5, 1.0) blau mitjà
12 (0.5, 0.0, 0.0) vermell fosc
13 (0.0, 0.5, 0.0) verd fosc
14 (0.0, 0.0, 0.5) blau fosc
15 (1.0, 0.95, 0.9) blanc ivori
Fig. 6: Colors per defecte, C0 a C15, de dalt a baix i d'esquerra a dreta.
0 1 2 3
4 5 6 7
8 9 10 11
12 13 14 15
Qn [val|op]1 . . . [val|op]m !Definició del valor del paràmetre Qn com a l'expressió en Notació Polonesa Inversa (Reverse Polish Notation, RPN), on val és un valor numèric o el valor d'un paràmetre Qm ja definit, i op és un operador (vegeu més avall). Qn es pot usar com a valor numèric per a coordenades (x, y), radis r, angles a, o vectors (ux, uy), per a la definició d'arcs circulars, llunes circulars, línies, malles, punts, estrelles, vector de translació, vectors de la malla o de la quadícula, en qualsevol lloc de
X x y
R r
A a [a']
[V] ux uy [vx vy wx wy]
Operador Expressió RPN Valor
_________ ______________ ____________
+ y x + y+x
- y x - y-x
* y x * y·x
/ y x / y/y
^ y x ^ y^x
chs x chs -x
i x i 1/x
r x r sqrt (x)
s x s sin (x_deg)
c x c cos (x_deg)
t x t tan (x_deg)
as x as asin_deg (x)
ac x ac acos_deg (x)
at x at atan_deg (x)
Exemples d'expressions RPN:
Q0 0.15 !Q0= 0.15
Q1 2 8 * !Q1= 2*8= 16
Q2 Q1 r !Q2= sqrt(Q1)= 4
Q3 1 2 + 3 4 + / !Q3= (1+2)/(3+4)= 3/7
Q4 3 r i !Q4= 1/sqrt(3)
Exemples d'us:
Q1 3 i !Definitció de Q1= 0.333, que es pot fer servir després
P5 X Q1 1 !P5 definit amb coordenades (0.333, 1)
VG 1 0 0 Q1 0 0 !Els vectors de la malla són (1, 0), (0, 0.333), (0, 0)
WR [Qn|Pn|Ln|Cn] !Escriu el valor d'un paràmetre Qn, les coordenades d'un punt Pn, les coordenades i l'angle d'una recta Ln, o el centre, radi i angles d'un arc circular Cn. Útil per a detectar errors.
Exemple:
WR P12
Pn X x y !Pn definit per les seves coordenades (x, y)
Pn [L|C]m [L|C]m' !Punt Pn definit com a intersecció de dues línies, Lm i Lm', dos arcs circulars, Cm i Cm', o una línia i un arc circular, Lm i Cm', o Cm i Lm'.
Pn M Pm Pm' !Pn definit com el punt mitjà del segment de Pm a Pm'
Pn [F|T|R] Pm !Pn definit com a Pm transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
P5 X 0.5 0.5
P6 L0 L4
P7 L0 C1
P8 M P0 P3
P9 F P3
P10 R P9
Els punts P0 a P3 estàn predefinits (les cantonades de la cel·la base) per a SY = 1, 3, 4, 6, i P0 a P5 per a SY = 2.
SY P0 P1 P2 P3 P4 P5
_____ ___________________ ____________ ___________ _______ _______
1, 4 (0, 0) (1, 0) (0, 1) (1, 1)
2 (0, 0) (1, 0) (0, 1) (1, 1) (0, -1) (1, -1)
3 (0, 0) (√3/2, -1/2) (0, 1) (√3/2, 1/2)
6 (0, 0) (√3/2, 0) (√3/4, √3/2) (√3/2, 1/2)
ME x0 y0 dx dy !Definició dels 100 punts P00 a P99 d'una quadrícula regular, amb Pij = (x0 + i dx, y0 + j dy); i, j = 0, 9.
Exemple:
ME 0 0 0.1 0.1
ST p d Pn [R r|Pm] A a !Definició de 2p punts d'una estrella PpDd, P{n+1} a P{n+2m} . L'estrella té centre a Pn, radi extern r o des de Pn fins a Pm, angle de posició a del primer punt P{n+1}. El cas d = 1 correspon a un polígon regular de p costats i només es defineixen els punts P(n+1) a P(n+p).
Exemples:
ST 12 4 P10 P5 A 30 !Definició dels punts P11 a P34 d'una estrella p12d4.
ST 6 1 P10 R 0.1 A 0 !Definció dels punts P11 a P16 d'un hexàgon regular (p6d1).
L'angle central a_c, l'angle als vèrtexs a_v, el radi dels punts interns r_inn, i el costat de l'estrella s, en termes del radi extern r, venen donats per:
a_c= 360/p
a_v= 180(p-2d)/p
r_inn/r= cos(180·d/p)/cos[180(d-1)/p]
s/r= sin(180/p)/cos[180(d-1)/p]
Els seus valors per a les estrelles més comunes, fins a 16 puntes són:
Estr. a_c a_v r_inn/r s/r
------ ----- ----- ------- ------
p5d2 72 36 0.3820 0.7265
p6d2 60 60 0.5774 0.5774
p8d2 45 90 0.7654 0.4142
p8d3 45 45 0.5412 0.5412
p9d2 40 100 0.8152 0.3640
p9d3 40 60 0.6527 0.4465
p9d4 40 20 0.3473 0.6840
p10d2 36 108 0.8507 0.3249
p10d3 36 72 0.7265 0.3820
p10d4 36 36 0.5257 0.5257
p12d2 30 120 0.8966 0.2679
p12d3 30 90 0.8165 0.2989
p12d4 30 60 0.7071 0.3660
p12d5 30 30 0.5176 0.5176
p16d2 22.5 135 0.9420 0.1989
p16d3 22.5 112.5 0.9000 0.2112
p16d4 22.5 90 0.8504 0.2346
p16d5 22.5 67.5 0.7857 0.2759
p16d6 22.5 45 0.6888 0.3512
p16d7 22.5 22.5 0.5098 0.5098
S6 Pn R r A a !Definició de 12 punts P{n+1} a P{n+12} d'una estrella p6d2, i 6 punts P{n+13} a P{n+18} dels seus rajos. L'estrella té centre a Pn, radi extern r, angle de posició a del primer punt P{n+1}. (Alternativament, els punts 1, 13, 3, 14, 5, 15 . . . 11, 18 són els 12 punts d'una estrella externa 6p/2d amb radi intern r.) Vegeu Fig. 7a.
Exemple:
S6 P10 R 0.2 A 30 !Definició dels punts P11 a P28 d'una estrella 6p/2d amd rajos.
En funció del radi extern r , el radi del rajos r_ray, el radi dels punts interns r_inn i el costat de l'estrella s, venen donats per:
r_ray = √3 r = 1.7321 r
r_inn = (√3/3) r = 0.5774 r
s = (√3/3) r = 0.5774 r
S8 Pn R r A a !Definició de 16 punts P{n+1} a P{n+16} d'una estrella p8d2, i 8 punts P{n+17} a P{n+24} dels seus rajos. L'estrella té centre a Pn, radi extern r, angle de posició a del primer punt P{n+1}. (Alternativament, els punts 1, 17, 3, 18, 5, 19, . . . 15, 24 són els 16 punts d'una estrella 8p/3d amb radi intern r.) Vegeu Fig. 7b.
Exemple:
S8 P10 R 0.2 A 0 !Definició dels punts P11 a P34 d'una estrella 8p/2d star amb rajos.
En funció del radi extern r , el radi del rajos r_ray, el radi dels punts interns r_inn, el semi-costat del quadrat interior r_sq i el costat de l'estrella s, venen donats per:
r_ray = √(2+√2) r = 1.8478 r
r_inn = √(2-√2) r = 0.7654 r
r_sq = (√2/2) r = 0.7071 r
s = (√2-1) r = 0.4142 r
Fig. 7. Geometria de les estrelles definides per S6 (esquerra) i S8 (dreta).
Ln <arg1> <arg2>
<arg1> = [Pm | X x y] !Primer punt de la línia.
<arg2> = [Pm' | X x' y' | A a | V ux uy | Lm' | Om']
[Pm' | X x' y'] !Un segon punt, o
A a !Angle de pendent, o
V ux uy !Vector direcció (ux, uy), o
Lm' !paraL·lel a la línia Lm', o
Om' !Ortogonal a la línia Lm'.
Ln M Pm Pm' !Mediatriu del segment de Pm a Pm', és a dir, perpendicular al punt mitjà.
Ln M Lm Lm' A a !Bisectriu de les línies Lm i Lm'. De les dues bisectrius, es tria la que té un angle més proper a a.
Ln [F|T|R] Lm !Ln definit com a Lm transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
L5 P0 P3
L6 X 0 0 A 45
L7 P0 V 1 1
L8 P0 L0
L9 P0 O0
L10 F L9
L11 R L10
L12 M P0 P3
L13 M L5 L6 A 30
Les línies L1 a L4 estàn predefinedes com les vores de la cel·la base per a SY = 1, 3, 4, 6, i L5 és la vora inferior per a SY= 2. L0 està predefineda com la bisectriu de la cel·la base. El programa suposa que aquestes línies defineixen les vores de la cel·la base. Això és necessari per al càlcul dels entrellaços. Per tant, aquestes línies s'han de redefinir si la cel·la base no és la per defecte, i només en aquest cas.
SY L0 L1 L2 L3 L4 L5
___ ________ _________ ________ _________ ________ ______
1 P0 A 45 P0 A 0 P0 A 90 P3 A 0 P3 A 90
2 P0 A 0 P0 A 0 P0 A 90 P3 A 0 P3 A 90 P4 A 0
3 P0 A 30 P0 A -30 P0 A 90 P3 A -30 P3 A 90
4 P0 A 45 P0 A 0 P0 A 90 P3 A 0 P3 A 90
6 P0 A 30 P0 A 0 P0 A 60 P3 A -30 P3 A 90
Cn <centre> <radi> <angles> !Arc circular definit pel seu centre, radi i angles inicial i final
<centre> = [Pm | X x y] !Centre de la circumferència
<radi> = [R r | Pm' | X x' y'] !Radi o punt de la circumferència que defineix el seu radi
<angles>= A ai af !Angles inicial i final de l'arc circular, en graus, en sentit antihorari des de l'eix x
Cn <centre> <punt1> <punt2> <h> !Arc circular definit pel seu centre i dos punts
<centre> = [Pm | X x y] !Centre de la circumferència
<punt1>= [Pm' | X x' y'] !Primer punt de l'arc circular, que defineix el seu radi i angle inicial
<punt2>= [Pm" | X x" y"] !Segon punt de l'arc circular, que defineix el seu angle final
<h>= [+1|-1] !Selecció de sentit antihorari/horari. Direcció de l'arc circular de Pm a Pm', en sentit antihorari (+1), o horari (-1).
Cn [F|T|R] Cm !Cn definit com a Cm transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
C2 P5 R 0.5 A 0 45
C3 P5 P6 A 0 45
C4 P5 X 0.5 0.5 A 0 45
C5 P5 P6 P8 +1
C6 R C5
C7 T C6
C0 està reservat per als trams rectes en la construcció d'àrees i entrallaços. C1 està predefinit com a l'arc circular centrat de radi 1, dins la cel·la base:
SY C1
___ _________________
1 P0 R 1 A 0 90
2 P0 R 1 A -90 90
3 P0 R 1 A -30 90
4 P0 R 1 A 0 90
6 P0 R 1 A 0 60
L'ordre de cosntrucció és primer les àrees, en ordre creixent (A1, A2, ...), després les llunes circulars (D1, D2, ...), els segments (G1, G2, ...) i, finalment, els entrellaços (I1, I2, ...). Aixó permet posar un color al fons definint la primera àrea que cobreixi tota la rajola base: A1 P0 P1 P3 P2.
AC c ! Definició del color d'àrea i de lluna circular com a c (0 - 15), vàlid fins que es canvii (valor per defecte = 0). Vegeu els colors per defecte a 2.2.
Example:
AC 7
CH c1 . . . cm !Permutació cíclica horitzonal de colors d'àrea, CH(c1)= c2, ..., CH(c{m-1})= cm, CH(cm)= c1.
CV c1 . . . cm !Permutació cíclica vertical de colors d'àrea, CV(c1)= c2, ..., CV(c{m-1})= cm, CV(cm)= c1. Usat per a canviar el color d'àrea per a cada rajola de la tessel·lació del mosaic (vegeu 3.1.4). Per a una àrea de color c, l'àrea de la rajola del mosaic a la posició (i, j) és CVj(CHi(c)).Per defecte CH(c)= CV(c)= c, per a c= 0, ... 15, és a dir, el mateix color per a totes les posicions.(vegeu Fig. 8).
Exemple:
CH 3 2 !Una àrea definida amb color 2 es dibuixa alternativament de colors 2 i 3 en la direcció horitzontal, perquè CH(2)= 3 i CH(3)= 2. Tots els altres colors d'àrea no es canvien.
Fig 8: CH i CV per defecte. Mosaic amb dos colors, 0 (blanc) i 12 (vermell fosc). Sense permutació de colors,
CH 12 13
Permutació horitzontal dels colors 12 i 13 (verd fosc).
CH 12 13 8
Permutació horitzontal dels colors 12, 13 i 8 (taronja).
CV 12 13
Permutació vertical dels colors 12 i 13.
An [P|F|T|R|C]1 . . . [P|F|T|R|C]m !Ârea poligonal definida per punts Pi, punts simètrics Fi= F Pi, punts traslladats Ti= T Pi,, o punts rotats Ri= R Pi, i opcionalment arcs circulars Ci entre punts. Per a costats rectes, només es donen els punts. Per compatibilitat amb versions anteriors, el nombre total de punts i costats pot aparèixer com a segon argument de la instrucció, és a dir,
An m [P|F|T|C]1 ... [P|F|T|C]m.
An [F|T|R] Am !An definit com a Am transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
A1 P1 P2 P3 P4 !Àrea 1 definida amb 4 punts i costats rectes.
A2 P1 C12 P2 P3 P4 !Àrea 2 definida amb 4 punts i un arc circular entre els punts P1 i P2,. El primer i últim punts de l'arc C12 han de ser P1 i P2 o P2 i P1.
A3 F A2
A4 T A3
Dn Pm [R r|Pm'] !Lluna circular definida pel seu centre Pm i radi r, o radi de Pm a Pm'
Dn [F|T|R] Dm !Dn definit com a Dm transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
D1 P0 R 0.1
D2 F D1
D3 T D2
Fig. 9: Entrellaç IW = 0
IW = 20
IW = 40
IW = 60
Fig. 10: Entrellaç IF = 2
IF = 1
IF = -1
IF = 0; IC = 9, 1
IW w !Definició de l'amplada de l'entrellaç i del segment com a w (valor per defecte = 12). Per a IW = 0, no es dibuixen els entrellaços. Per a amplades grans, algunes àrees poden desparèixer (vegeu Fig 9).
Exemple:
IW 16
IC c b !Definició del color interior de l'entrellaç c i color de la vora i del segment b (valors per defecte = 0, 1). Vegeu Fig. 10.
Exemple:
IC 9 1
IF k !Selecció del tipus d'entrellaç com a k per a tots els entrellaços del mosaic (vegeu Fig. 10):
0: entrellaços amb creuaments per sobre i per sota (valor per defecte),
1: entrellaços amb creuaments plans,
2: només una línia com a entrellaç (del color de la vora, amplada de línia donada per IW)
-1, -2, -3, -4: en relleu, amb la llum venint del sector |k|
Example:
IF -1
In [P|F|T|R]1 [P|F|T|R|C] . . . [P|F|T|R]m !Entrellaç definit pels punts Pi, punts simètrics Fi= F Pi, punts traslladats Ti= T Pi, o punts rotats Ri= R (Pi, i opcionalment arcs circulars Ci entre punts (només per a entrellaços com a línia, IF = 2). Per compatibilitat amb versions anteriors, el nombre total de punts i costats pot aparèixer com a segon argument de la instrucció, és a dir,
In m [P|F|T|C]1 ... [P|F|T|C]m.
In [F|T|R] Im !In definit com a Im transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
I1 P1 P2 P3 P4
I2 P1 C12 P2 P3 P4
I3 3 P1 F2 T3
I4 F I3
I5 T I4
La llista de punts ha d'incloure cada punt de creuament (amb un altre entrellaç) i cada punt amb un canvi de direcció. Si un segment de l'entrellaç és corbat, l'arc circular ha d'aparèixer llistat entre els dos punts (vegeu els exemples de l'apartat d'àrees, 3.4.2). Els entrellaços corbats només funcionen per a entrellaços com a línies (IF = 2).
Gn [P|F|T|R]1 [P|F|T|R]2 !Segment del punt P1 al P2 (o punts simètrics Fi= F Pi, o punts traslladats Ti= T Pi, o punts rotats Ri= R Pi. L'amplada i el color són l'amplada i el color de la vora de l'entrellaç, definit prèviament amb IW i IC
Gn [F|T|R] Gm !Gn definit com a Gm transformat per simetria (F, vegeu 3.2.1), translació (T, vegeu 3.2.2) o rotació (R, vegeu 3.2.3).
Exemples:
G1 P2 F6
G2 R G1
G3 T G2
Entre les causes usuals del dibuix incorrecte dels entrellaços cal destacar:
Entrellaços duplicats. Per exemple:
dos entrellaços amb la mateixa seqüència de punts, cap endavant i cap endarrere,
un entrellaç simètric, In, i la seva versió simètrica, Im F In.
Un punt duplicat, que apareix a les definicions dels entrellaços com a dos punts diferents. Els punts creats per definicions múltiples de punts (ME, S6, S8) no es comprova que no estiguin duplicats. Si dos punts, Pn i Pm, tenen les mateixes coordenades (x, y), és a dir que són el mateic punt geomètric, no són reconeguts com el mateix punt pel càlcul dels entrellaços, el punt no s'identifica com a punt de creuament, i el dibuix dels entrellaços pot fallar.
Un punt de creuament que falta a una definició. És fàcil passar per alt un punt de creuament perquè es troben en segments rectes de l'entrellaç. Algunes eines per ajudar a detectar un punt de creuament que falti:
opció -g: la línia de l'entrellaç apareix dibuixada per sobre del punt de creuament que falta.
opció -c: el punt que falta no apareix marcat en el creuament de dos entrellaços.
Definició incorrecta de les línies L1 a L4 quan es fa servir una cel·la base diferent de la per defecte. Quan es calculen els entrellaços se suposa que aquestes línies son els costats de la cel·la base.
Els entrellaços es calculen bé (molt probablement) en tots els casos, si estan ben definits. Si falla el dibuix dels entrellaços, un o més d'un dels entrellaços està definit incorrectament. Els diferents tipus d'entrallaçat són més o menys robusts davant dels errors. En ordre creixent de sensibilitat als errors, tenim
IF 2 (línia). Molt robust. Permet dibuixar entrellaços corbats. Sempre es dibuixen bé.
IF < 0 (relleu). Robust. Si falta un punt de creuament en una definició, el creuament apareix com a per sobre i per sota.
IF 1 (pla). Delicat. Els punts de creuament que falten o els punts duplicats apareixen com a per sobre i per sota, però també pot ser que el dibuix dels entrellaços falli.
IF 0 (per defecte, per sobre i per sota). Molt delicat. Només que falti un únic punt de creuament en un entrellaç, falla tot el dibuix dels entrellaços. El entrellaços es calculen correctament només si totes les definicions són correctes.
Aquesta definició dibuixa els mosaics de les Figs. 3, 9 i 10.
! Exemple.def
! Les línies que comencen amb "!" són comentaris
! Secció global
TI "Exemple de la Fig. 3" !El text després de "!" és un comentari
SY 4 !Simetria rotacional d'ordre 4
SZ 4 !Grandària de la malla 4x4
! Secció de definició de punts, línies, arcs circulars
C2 P0 R 1 A 0 180 !Arc circular de centre P0, radi 1, angles de 0 a 180 graus
P5 C2 L0 !P5 definit com a intersecció de l'arc C2 i la línia predef. L0
L6 P0 O0 !Línia definida pel punt P0 i ortogonal a L0
P6 C2 L6
L7 X -1 0 P5 !Primer punt definit per les coordenades (-1,0)
L8 P1 P6 !Línia definida pels punts P1 i P6
P7 L7 L8 !P7 definit com a intersecció de les línies L7, L8
P8 L0 L8
L9 F L7 !Línia L9 simètrica de L7 respecte a l'eix per defecte L0
L10 F L8
P12 L8 L9
P13 L10 L7
P14 L7 L4
! Secció de construcció: àrees
AC 4 !Color d'area 4 = blau intens
A1 P0 F7 P12 P8 P13 P7 !Àrea definida per 6 punts (F7 és el punt simètric F P7)
AC 3 !Color d'àrea 3 = verd intens
A2 F7 P12 P1
A3 P8 P12 P5 P13
A4 F A2 !L'àrea A4 és la simètrica de l'A2 respecte a L0
AC 5 !Color d'àrea 5 = blau cel
A5 P1 P12 P5 P14
A6 P2 P13 P5 F14
AC 8 !Color d'àrea 8 = taronja fosc
A7 P5 P14 P3 F14
! Secció de construcció: entrellaços
IW 15 !Amplada d'entrellaç 15
I1 P1 P12 P8 P13 P2 !Entrellaç definit per 5 punts
I2 F7 P12 P5 F14 !Definició usant punts simètrics F7 i F14
I3 F I2 !L'entrellaç I3 és el simètric d'I2 respecte a L0
Instrucció Definició Ús
__________________________ ____________________________________ ________________________________________________
A1-A999 (Area) Construcció d'àrea An [P|F|T|R|C]1 ... [P|F|T|R|C]m
An [F|T|R] Am
AC (Area Color) Color d'àrea AC c
C0-C999 (Circular arc) Definició d'arc circular Cn [Pm|X x y] [R r|Pm'|X x' y'] A ai af
Cn [Pm|X x y] [Pm'|X x' y'] [Pm"|X x" y"] [+1|-1]
Cn [F|T|R] Cm
CH (Color cycle, Hor.) Cicle horitzontal de colors d'àrea CH c1 ... cm
CO (COlor) Definició de color CO c r g b
CV (Color cycle, Ver.) Cicle vertical de colors d'àrea CV c1 ... cm
D1-D999 (Dot) Construcció de lluna circular Dn Pm [R r|Pm']
Dn [F|T|R] Dm
FA (Flip Axis) Eix de simetria FA Ln
G1-G999 (SeGment) Construcció de segment Gn [P|F]1 [P|F]2
Gn [F|T|R] Gm
I1-I999 (Interlace) Construcció d'entrellaç In [P|F|T|R]1 [P|F|T|R|C]2 ... [P|F|T|R|C]m
In [F|T|R] Im
IC (Interlace Color Color d'entrellaç IC c b
IF (Interl. Flat sel.) Selecció d'entrellaç IF [0|1|2|-n]
IW (Interlace Width) Amplada d'entrellaç IW w
L0-L999 (Line) Definició de línia Ln [Pm|X x y] [Pm'|X x y|A a|V ux uy|Lm'|Om']
Ln M Pm Pm'
Ln M Lm Lm' A a
Ln [F|T|R] Lm
ME (MEsh) Definició de quadrícula (múlt. punts) ME x0 y0 dx dy
P0-P999 (Point) Definició de punt Pn [X x y|[L|C]m [L|C]m']
Pn M Pm Pm'
Pn [F|T|R] Pm
Q0-Q999 (Parameter) Definició de paràmetre Qn [val|op]1 ... [val|op]m
RC (Rotation Center) Centre i angle de rotació RC [Pn|X x y] A a
S6 (6p Star) Estrella 6p/2d i rajos (múlt. punts) S6 Pn R r A a
S8 (8p Star) Estrella 8p/2d i rajos (múlt. punts) S8 Pn R r A a
ST (STar) Definició d'estrella (múlt. punts) ST p d Pn [R r|Pm] A a
SY (SYmmetry) Simetria rotacional SY [1|2|3|4|6]
SZ (SiZe) Grandària de la malla SZ s
TI (TItle) Títol del mosaic TI "Títol"
TV (Translat. Vector) Vector de translació TV [Pn Pm|ux uy]
VG (Vect. def. Grid) Vectors definició de la malla VG ux uy vx vy wx wy
WR (WRite) Escriu coordenades WR [Qn|Pn|Ln|Cn]
Paràmetre Definició Ús
___________________ ________________________________ ________________________________________
A (Angle) Angle A a, A a1 a2
F (Flipped) Simètric F Pn, F Ln, F Cn, F An, F Dn, F Gn, F In
Fn (Flipped point) Punt simètric Fn
Ln (paralleL) Paral·lel a línia Ln
M (Midpoint) Punt mitjà, mediatriu, o bisectriu M Pn Pm, M Ln Lm
On (Ortogonal) Ortogonal a línia On
R (Radius, Rotatiom) Radi, rotació R r, R Pn, R Ln, R Cn, R An, R Dn, R Gn, R In
Rn (Rotated point) Punt rotat Rn
T (Translation) Translació T Pn, T Ln, T Cn, T An, T Dn, T Gn, T In
Tn (Translated point) Punt traslladat Tn
V (Vector) Vector V ux uy
X (X-y) Coordenades x-y X x y
Option -s (size)
mosaic -s <size> [<file>[.def]]
Overrides the size given in the def file and use <size> instead.
Option -e (edit)
mosaic -e [<file>[.def]]
Opens <file>.def, executes all the commands (as in debug mode, but without stopping at each command), and pauses for keyboard input:
Ret: rereads the def file and executes any modification made with an external editor
Ctrl-D (EOF): Finishes and plots mosaic
Zoom animation starts with size SZ= 0.5*max (abs (ux), abs (uy), abs (vx), abs (vy)). Changes in command_sz, command_vg.
New rotation transformation for points, lines, arcs, areas, interlaces, etc.
RC [Pn|X x y] A a !Setting (R)otation (C)enter and angle
Rn !Pn rotated, in area or interlace definition
Pn R Pm !Pn= Pm rotated
Ln R Lm !Ln= Lm rotated
Cn R Cm !Cn= Cm rotated
An R Am !An= Am rotated
Dn R Dm !Dn= Dm rotated
Gn R Gm !Gn= Gm rotated
In R Im !In= Im rotated
Qn command parses an RPN expression:
Qn [val|op]1 ... [val|op]m
where the expression is a Reverse Polish Notation (RPN) expression composed of:
val: a value or an already defined parameter Qi
op: an operator: "+", "-", "*", "/", "^", "r" (sqrt), "i" (^-1), "s" (sin_deg), "c" (cos_deg), "t" (tan_deg)
Examples (a, b are real values or parameters Qm)
Q0 a b * !a*b
Q1 Q0 r !sqrt(a*b)
Q2 a b + 2 / !(a+b)/2
Q3 a b + c d + / !(a+b)/(c+d)
Q4 a r i !1/sqrt(a)
New version 2024.03 with the following modifications
Segments and outline interlaces (IF= 2) producing the same width as for IF= 0, 1, <0, scaled for any value of SZ. May need rescaling of iw for IF= 2 in old def files
New command real value parameter. Defines the real value of a parameter (Q0 to Q999), usable for (x, y) coordinates, radii, angles or vectors.
Qn val
Can be used as a real value in the definition of circular arcs, dots, lines, mesh, points, stars, translation vector, grid vectors, in any instance of
X x y
R r
A a [a']
[V] ux uy [vx vy wx wy]
Area and interlace construction, number of points and edges no longer needed. Kept as optional for compatibility with previous versions
An [P|F|T|C]1 [P|F|T|C]2 ... [P|F|T|C]m
In [P|F|T|C]1 [P|F|T|C]2 ... [P|F|T|C]m
Added instruction to cycle area colors for each position (i, j) of the mosaic tile in the tessellation.
CH c1 ... cm !Cyclic permutation CH(c1)= c2, ..., CH(c{m-1})= cm, CH(cm)= c1
CV c1 ... cm !Cyclic permutation CV(c1)= c2, ..., CV(c{m-1})= cm, CV(cm)= c1
For an area color c, the area in the mosaic tile at position (i, j) is CV^j(CH^i(c)). Default CH(c)= CV(c)= c, for c= 0, ... 15, i.e., the same color for all positions.
Circular arcs in areas and interlaces construction no longer need to be with a given direction. That is, in "... P1 C12 P2 ...", C12 can be an arc from P1 to P2 or from P2 to P1. The first and last points of C12 have to be P1 and P2, or P2 and P1.
Added translation motion for points, lines, arcs, areas, etc:
TV [Pn Pm|ux uy] !definition of translation vector, from Pn to Pm, or (ux, uy)
Pn T Pm
Ln T Lm
Cn T Cm
An T Am
Dn T Dm
Gn T Gm
In T Im
Added "Tn" meaning "T Pn" in area and interlace construction
An m [P|F|T]1 [P|F|T|C]2 ... [P|F|T|C]m
In m [P|F|T]1 [P|F|T|C]2 ... [P|F|T|C]m
mosaic.txt changed to mosaic_help.text
Help file and mosaic manual updated
Gn using width and border color of interlaces, in order to be similar to Dn and areas. Gn becomes
Gn [P|F]1 [P|F]2
using the width w and border color b defined by the previous last commands IW w, IC c b
New version (2023.11) with the following modifications
Temporary gif files no longer created. The anim gif file is created directly from temporray eps files
Anim shows again construction of areas and interlaces, as was in the first nersions of mosaic.
Animated gif file optimized with
mogrify -layers 'optimize' -fuzz 7% <file>_anim.gif
Included in mosaic.f90. Script "optimize" in mosaic home dir
New command "Gn" (seGment) (no "Segment", because S6, S8 already in use)
Gn w c [P|F]1 [P|F]2 !segment with width w, color c, from P1 to P2
Gn F Gm
Segment width, for SZ= 1, producing the same width as IW w (for IF= 0, 1), and scaled for different values of SZ This makes obsolete most common uses of IF 2 (outline interlaces)
Read_definitions routine splitted in 21 routines, one for each command: command_ac, . . ., command_wr. Easier to correct or add definitions.
Rewritten parsing of command line in a list of arguments separated by blanks or tabs (get_arg routine), allowing to a simplification of command_xx routines.
All variables declared explicitly, "implicit none" used in all routines.
Including dots and segments in dbg file, adding interlaces kflat to interlaces.
In debug mode, plots circular edges of areas, dots and segments.
For SY 2, L0 defined as diagonal P0 P3
Added new line definition
Ln M Pm Pm'
mediatrix (perpendicular to the midpoint) of segment from Pm to Pm'.
Added new line definition
Ln M Lm Lm' A a
bisector of lines Lm and Lm'. Out of the two bisectors, that with an angle closest to a is chosen.
Polygon definition using ST (star definition), with d= 1.
ST p 1 Pn [R r|Pm] A a
Only points P(n+1) to P(n+p) are defined (instead of P(n+1) to P(n+2p) for a star with d > 1).
Added new instruction to display coordinates of a point, point and angle of a line, or center, radius and angles of a circular arc. Used for debugging.
WR [Pn|Ln|Cn]
Added new kind of area to be plotted after areas An and before interlaces In.
Dot construction of a circular dot centered on Pm, with radius r or radius from Pm to Pm':
Dn Pm [R r|Pm']
Dot construction as dot Dm flipped around the flip axis:
Dn F Dm
Stable new version v2020 of program mosaic. mosaic_anim and mosaic_graph obsolete and no longer maintained.
New test version mosaic2020.f90, encompassing mosaic_anim and mosaic_graph in a single program.
New utility program to construct areas and interlaces graphically mosaic_graph.f90.
New file mosaic_notes.txt
Color definitions saved to file dbg.
Only points and arcs used in area and interlace construction are listed in file dbg.
Added S8 command.
Extension msc changed to dbg