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())
<-apply(Raven(pie.4(),
M1"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
)
<-apply(Raven(pie.2(),
M1"multifill","multifill"))
draw(M1)
<-apply(Raven(pie.2.inv(),
M1"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()
)
<-apply(Raven(cof(u.bow.tie(), u.pie.2(),
M1u.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)