Novità

Ottavia

2022-11-10

Figure già definite nel codice

Torte e fette

Potenzialmente, alla singola fetta si può cambiare la dimensione e la rotazione (non riesco a farlo automaticamente)

la torta a 4 fette è definita sia come compose4 (pie()) sia come simple (u.pie.4())

Bisogna aggiungere una sfumatura di grigio per poter usare il filling

Singola fetta:

draw(slice())

draw(slice(theta1= 3*pi/4,
           theta2 = 5*pi/4))

draw(pie.4())

M1<-apply(Raven(pie.4(),
                "multifill","multifill"))
draw(M1)

Torte a metà

In questo caso ho definito 4 semi cerchi, i rispettivi cerchi sia come compose4 sia come simple:

draw(semi.circle())

draw(semi.circle1())

draw(semi.circle.inv())

draw(semi.circle.inv1())

draw(pie.2())

draw(pie.2.inv())

NB: per pie.2 e pie.2.inv esiste anche la versione simple (u.pie.2, pie.2.inv)

M1<-apply(Raven(pie.2(),
                "multifill","multifill"))
draw(M1)

M1<-apply(Raven(pie.2.inv(),
                "multifill","multifill"))
draw(M1)

Bowtie

Lui è l’unione di due triangoli. Esiste sia come due forme separate (bow.tie) sia come forma unica (u.bow.tie())

M1<-apply(Raven(cof(u.bow.tie(), u.pie.2(), 
                    u.pie.4()),
                "diff_shapes","diff_shapes"))
draw(M1)

Forme da implementare nel codice

Mi riferisco nello specifico ai quadrati pieni

Ho modificato un po’ la funzione draw() in modo che non mettesse per froza un nuovo canvas e mi permettesse di usare le righe che ci sono già:

Per diesgnare il riempimento va usata la funzione crop, con cui si disegna un quadrilatero che è dove verranno poi disegnate le righe:

crop(x1, x2, y1, y2)

Esempio:

Canvas(bg = "white")
DrawCircle (r.out = 1, col="white")
clip(0, 0.7, 0.7, -0.7)
draw(diagline(p.x =  c(seq(-1, 1, by = .2),
              p.y = 1)), 
     canvas = F)

Sul cerchio non ha senso. Sul quadrato si.

Modifcando le x e le y quando si disegnano le righe si ottiene il riempimento desiderato

Modificando l’argomento by all’interno del seq si modifica la densità del rimepimento

Metà superiore con righe diagonali a 45 gradi:

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), # prepara il quadrilatero  
     unlist(square()$size.x)/sqrt(2),  # entro cui fare le righe
     unlist(square()$size.x)/sqrt(2), # in questo grado ha la stessa dimensione del quadrato
     -unlist(square()$size.x)/sqrt(2))

draw(diagline.inv(p.x = c(seq(-20, 20, by = 1)),
                  p.y = unlist(square()$size.x)/2),  
     canvas = F)

Metà inferiore con righe diagonali a 45 gradi:

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2),
     -unlist(square()$size.x)/sqrt(2))
draw(diagline.inv(p.x = c(seq(-20, 20, by = 1)),
                  p.y = -unlist(square()$size.x)/2), canvas = F)

Pieno:

Per disegnarlo pieno conviene mettere le righe sotto e le roghe sorpa come due cose separate per motivi che boh

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), # prepara il quadrilatero  
     unlist(square()$size.x)/sqrt(2),  # entro cui fare le righe
     unlist(square()$size.x)/sqrt(2), # in questo grado ha la stessa dimensione del quadrato
     -unlist(square()$size.x)/sqrt(2))

draw(diagline.inv(p.x = c(seq(-20, 20, by = 1)),
                  p.y = unlist(square()$size.x)/2),  
     canvas = F)
draw(diagline.inv(p.x = c(seq(-20, 20, by = 1)),
                  p.y = -unlist(square()$size.x)/2), canvas = F)

In verticale

Ovviamente, modifcando la x si può fare la stessa cosa in verticale:

SInistra, 45 gradi

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2),
     -unlist(square()$size.x)/sqrt(2))
draw(diagline.inv(p.x =  -unlist(square()$size.x)/2,
                  p.y =  c(seq(-20, 20, by = 1))), 
     canvas = F)

Destra, 135 gradi

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2),
     -unlist(square()$size.x)/sqrt(2))
draw(diagline(p.x =  unlist(square()$size.x)/2,
                  p.y =  c(seq(-20, 20, by = 1))), 
     canvas = F)

Messi insieme

draw(square())
clip(-unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2), 
     unlist(square()$size.x)/sqrt(2),
     -unlist(square()$size.x)/sqrt(2))
draw(diagline.inv(p.x =  -unlist(square()$size.x)/2,
                  p.y =  c(seq(-20, 20, by = 1))), 
     canvas = F)
draw(diagline(p.x =  unlist(square()$size.x)/2,
                  p.y =  c(seq(-20, 20, by = 1))), 
     canvas = F)