Abbiamo deciso di usare R per generare le matrici, nello specifico stiamo utilizzando il pachetto DescTools
, il quale, tra le tante amenità, permette di ottenere rappresentazioni grafiche di alto livello.
Tutte la rappresentazioni grafiche in DescTools
sono basate su figure inscritte in un cerchio. Per questa ragione, le dimensioni delle figure sono basate sul raggio del cerchio entro cui sono inscritte (rendendo necessario un ripasso di geometria…)
Il funzionamento è molto semplice: definiamo le caratteristiche delle figure e le diamo in pasto alle funzioni di di DescTools
, queste poi vanno a disegnare effettivamente le singole celle della matrice.
Come prima cosa, vanno definiti gli oggetti da includere nella matrice e le loro carattertistiche.
Per questo, viene creata la classe field
field
Si tratta di una lista di lista. Ogni lista contiene le informazioni relative alle diverse caratteristiche degli oggetti.
field <- list(
shape = NULL,
size.x = list(),
size.y = list(),
theta.1 = list(),
theta.2 = list(),
rotation = list(),
pos.x = list(),
pos.y = list(),
lty =list(),
lwd = list(),
num = list(),
nv = list(),
shade =list(),
visible = NULL,
tag = list()
)
shape
: Definisce le forme da usare nella matrice
size.x
: Definisce la lunghezza di un raggio del cerchio entro cui è inscritta la figura
size.y
: Definisce la lunghezza dell’altro raggio del cerchio entro cui è inscritta la figura
theta.1
: coordinate per disegnare le sezioni di cerchio
rotation
: definisce la rotazione della figura in radianti
pos.x
: posizione sull’ascissa rispetto allo 0
pos.y
: posizione sull’ordinata rispetto allo 0
lty
: Tipo di controno (solid
, dashed
, dotted
)
lwd
: Spessore del contorno
num
: Figura a base di segmenti o di archi
nv
: Numero dei vertici da disegnare
shade
: Riempimento della figura
(scala di grigi)
visible
: determina se la figura definita in shape va mostrata nella x esima cella
tag
: serve in seguito per definire se l’immagine può essere rimpicciolita, se è un’immagine semplice o che è composta da altre immagini
square()
## $shape
## [1] "square"
##
## $size.x
## $size.x[[1]]
## [1] 15
##
##
## $size.y
## $size.y[[1]]
## [1] 15
##
##
## $theta.1
## $theta.1[[1]]
## [1] 0
##
##
## $theta.2
## $theta.2[[1]]
## [1] 0
##
##
## $rotation
## $rotation[[1]]
## [1] 0.7853982
##
##
## $pos.x
## $pos.x[[1]]
## [1] 0
##
##
## $pos.y
## $pos.y[[1]]
## [1] 0
##
##
## $lty
## $lty[[1]]
## [1] 1
##
##
## $lwd
## $lwd[[1]]
## [1] 3
##
##
## $num
## $num[[1]]
## [1] 1
##
##
## $nv
## $nv[[1]]
## [1] 4
##
##
## $shade
## $shade[[1]]
## [1] NA
##
##
## $visible
## [1] 1
##
## $tag
## $tag[[1]]
## [1] "simple" "small"
##
##
## attr(,"class")
## [1] "field"
Per unire più figure inisieme, si utilizza la funzione cof()
, che non fa altro che andare ad aggiungere dettagli delle singole figure all’interno di field
Raven_matrix
Tutte le informazioni relative alle singole figure e le logiche le dominano devono essere combiante nella matrice. Tutte queste informazioni sono contenute all’interno della classe Raven_matrix()
Raven<-list(
Sq1 = list(),
Sq2 = list(),
Sq3 = list(),
Sq4 = list(),
Sq5 = list(),
Sq6 = list(),
Sq7 = list(),
Sq8 = list(),
Sq9 = list(),
hrule = list(),
vrule = list()
)
## [,1] [,2] [,3]
## [1,] "Sq1" "Sq2" "Sq3"
## [2,] "Sq4" "Sq5" "Sq6"
## [3,] "Sq7" "Sq8" "Sq9"
La generazione di una matrice è fatta tramite due passaggi. Nel primo si crea l’oggetto Raven_matrix
inserendo al suo interno le forme e le regole che devono essere applicate utilizzando la funzione Raven()
.
Nel secondo le regole vengono applicate agli elementi della classe tramite il metodo apply()
.
M<-Raven(st1=square(),hrule=c("size"),vrule=c("identity"))
M<-apply(M) # applica effetivamente la regola
draw(M) # disegna la matrice
In entrambi questi esempi vengono disegnate due matrici separate (M1
, M2
e M3
, M4
) e vengono combinate insieme (i.e., sovraimposte) grazie alla funzione com()
.
M1<-apply(Raven(cof(
s.lilth
,square(s.x=3,s.y=3,rot = pi/2),
cross()
), "diff_shapes"))
M2<-apply(Raven(cof(square(), circle(),
dice()
), vrule = "diff_shapes"))
M3<-apply(Raven(cof(
dot()
, square(s.x=3,s.y=3,rot = pi/2,shd="black"),
xcros
), "diff_shapes"))
M4<-apply(Raven(cof(square(),circle(),
pentagon()
),vrule = "diff_shapes"))
M<-logic_rules(Raven(lily()),"OR")
draw(M)
M1<-logic_rules(Raven(square4()),"AND")
M2<-logic_rules(Raven(lilth),"XOR")
draw(com(M1,M2))