1 Introduzione

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.

2 Cosa

Come prima cosa, vanno definiti gli oggetti da includere nella matrice e le loro carattertistiche.

Per questo, viene creata la classe field

2.1 Classe 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

Vedi esempio
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

2.2 Classe 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"

3 Creazione di una matrice

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

4 Alcuni esempi di possibili stimoli

4.1 Stesse regole, matrici diverse

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"))

Vedi figura

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"))

Vedi figura

4.2 Regole logiche

4.2.1 Una sola regola logica (OR)

M<-logic_rules(Raven(lily()),"OR")
draw(M)

4.2.2 Più regole logiche (AND e XOR)

M1<-logic_rules(Raven(square4()),"AND")
M2<-logic_rules(Raven(lilth),"XOR")
draw(com(M1,M2))