# [  dopo avere introdotto   source("http://macosa.dima.unige.it/r.R")  ]
# Per traslare, ruotare, moltiplicare le coordinate dei punti posso usare i comandi:
# MolTraRot(x,y, mx,my, tx,ty, ang) e RotTraMol(x,y, ang, tx,ty, mx,my). Dato (x,y) il
# primo ne moltiplica le coordinate per mx ed my, poi lo trasla di tx,ty e infine lo
# ruota attorno a (0,0) di ang. Il secondo invece prima lo ruota attorno a (0,0), poi
# lo trasla e infine ne moltiplica le coordinate.
# Ecco come generare la figura sotto riprodotta a sinistra.
HF=4; BF=4
x_1 <- c(13,11,10, 9, 7,7.5, 7, 9,10,11,13,17,20,20.5,18.5,21,20,17,13)
y_1 <- c(17,16,15,13,10, 13,16,13,11,10, 9, 9,11,  12,  13,13,15,17,17)
x_2 <- c(13,12,15,14,17,13)
y_2 <- c(17,20,17,20,17,17)
x_3 <- c(17,14,15,12,13,17)
y_3 <- c( 9, 6, 9, 6, 9, 9)
c_1 <- "black"; c_2 <- "green"; c_3 <- "magenta"
n1 = length(x_1); n2 = length(x_2); n3 = length(x_3)
PIANO(-30,30,-30,30)
# Il pesce giallo.
spezzaC(x_1,y_1,"yellow")
spezzata(x_1,y_1,c_1); spezzata(x_2,y_2,c_2); spezzata(x_3,y_3,c_3)
# La trasformazione che ruota il pesce di 60° attorno a 0,0
xx_1=xx_2=xx_3=yy_1=yy_2=yy_3=0     # inzializzo le variabili
for(i in 1:n1) {k = MolTraRot(x_1[i],y_1[i], 1,1, 0,0, 60); xx_1[i]=k[1]; yy_1[i]=k[2]}
for(i in 1:n2) {k = MolTraRot(x_2[i],y_2[i], 1,1, 0,0, 60); xx_2[i]=k[1]; yy_2[i]=k[2]}
for(i in 1:n3) {k = MolTraRot(x_3[i],y_3[i], 1,1, 0,0, 60); xx_3[i]=k[1]; yy_3[i]=k[2]}
Spezzat(xx_1,yy_1, c_1); Spezzat(xx_2,yy_2,c_2); Spezzat(xx_3,yy_3,c_3)
# Schiaccio il pesce orizzontalmente e lo allungo verticalmente, non lo traslo, lo
# ruoto di 180° attorno a (0,0)
for(i in 1:n1) {k = MolTraRot(x_1[i],y_1[i], 1/2,1.5, 0,0, 180); xx_1[i]=k[1]; yy_1[i]=k[2]}
for(i in 1:n2) {k = MolTraRot(x_2[i],y_2[i], 1/2,1.5, 0,0, 180); xx_2[i]=k[1]; yy_2[i]=k[2]}
for(i in 1:n3) {k = MolTraRot(x_3[i],y_3[i], 1/2,1.5, 0,0, 180); xx_3[i]=k[1]; yy_3[i]=k[2]}
Spezzat(xx_1,yy_1, c_1); Spezzat(xx_2,yy_2,c_2); Spezzat(xx_3,yy_3,c_3)
# Lo ruoto attorno a (0,0) di -90°, lo traslo di -15,15, ne raddoppio le ascisse
for(i in 1:n1) {k = RotTraMol(x_1[i],y_1[i], -90, -15,15, 2,1); xx_1[i]=k[1]; yy_1[i]=k[2]}
for(i in 1:n2) {k = RotTraMol(x_2[i],y_2[i], -90, -15,15, 2,1); xx_2[i]=k[1]; yy_2[i]=k[2]}
for(i in 1:n3) {k = RotTraMol(x_3[i],y_3[i], -90, -15,15, 2,1); xx_3[i]=k[1]; yy_3[i]=k[2]}
Spezzat(xx_1,yy_1, c_1); Spezzat(xx_2,yy_2,c_2); Spezzat(xx_3,yy_3,c_3)
# Lo ruoto di -70°, non lo traslo, ne diminuisco ascisse e aumento ordinate.
for(i in 1:n1) {k = RotTraMol(x_1[i],y_1[i], -70, 0,0, 0.75,1.25); xx_1[i]=k[1]; yy_1[i]=k[2]}
for(i in 1:n2) {k = RotTraMol(x_2[i],y_2[i], -70, 0,0, 0.75,1.25); xx_2[i]=k[1]; yy_2[i]=k[2]}
for(i in 1:n3) {k = RotTraMol(x_3[i],y_3[i], -70, 0,0, 0.75,1.25); xx_3[i]=k[1]; yy_3[i]=k[2]}
Spezzat(xx_1,yy_1, c_1); Spezzat(xx_2,yy_2,c_2); Spezzat(xx_3,yy_3,c_3)
  
# Tracciato un segmento o una freccia (con i comandi freccia, segm, linea, ...) le
# coordinate del punto finale sono memorizzate in xpunta e ypunta. La cosa può essere
# utile per costruire vari tipi di figure. Un punto inziale può essere tracciato con
# punticino: le sue coordinate sono messe in xpunta, ypunta.   Vedi qui sotto come
# generare la figura sopra a destra.
HF=3; BF=3; PIANO(-1,1,-1,1)
punticino(1,0, 1)
for(i in 1:500) {P = RotTraMol(xpunta*99/100,ypunta*99/100, 30, 0,0, 1,1); segm(xpunta,ypunta, P[1],P[2], i) }
#
#
# Trasformazioni geometriche con una figura più semplice
source("http://macosa.dima.unige.it/r.R")
HF=5; BF=5
x <- c(13,11,10, 9, 7,7.5, 7, 9,10,11,13,17,20,20.5,18.5,21,20,17,13)
y <- c(17,16,15,13,10, 13,16,13,11,10, 9, 9,11,  12,  13,13,15,17,17)
c <- "black"
n = length(x)
PIANO(-25,30,-20,35)
# Il pesce giallo, con bordo nero
spezzaC(x,y,"yellow"); spezzata(x,y,c)
  
xx = yy = 0     # inzializzo le variabili
# Simmetria rispetto asse x (bordo marrone)
for(i in 1:n) {xx[i]=y[i]; yy[i]=x[i]}
spezzata(xx,yy, "brown")
# Ribaltamento attorno all'asse x (bordo rosso)
for(i in 1:n) {xx[i]=x[i]; yy[i]=-y[i]}
spezzata(xx,yy, "red")
# Ribaltamento attorno all'asse y (bordo verde mare)
for(i in 1:n) {xx[i]=-x[i]; yy[i]=y[i]}
spezzata(xx,yy, "seagreen")
# Riduzione di scala (verde chiaro)
for(i in 1:n) {xx[i]=x[i]/2; yy[i]=y[i]/2}
spezzata(xx,yy, "green")
linea(0,0, x[7],y[7], "red"); linea(0,0, x[12],y[12], "red")
# Rotazione del pesce verde chiaro di 90° attorno a -1,1 (bordo arancione)
# Prima lo traslo portando -1,1 nell'origine, poi ruoto e traslo in direzione opposta
PUNTO(-1,1, "blue")
for(i in 1:n) {xx[i]=xx[i]+1; yy[i]=yy[i]-1}
for(i in 1:n) {k = RotTraMol(xx[i],yy[i], 90, -1,1, 1,1); xx[i]=k[1]; yy[i]=k[2]}
spezzata(xx,yy, "orange")
linea(-1,1, x[5]/2,y[5]/2, "blue"); linea(-1,1, xx[5],yy[5], "blue")
# Dimezzamento delle x e raddoppio delle y del pesce iniziale (magenta)
for(i in 1:n) {xx[i]=x[i]/2; yy[i]=y[i]*2}
spezzata(xx,yy, "magenta")
# Similitudine e ribaltamento (pesce grigio)
for(i in 1:n) {xx[i]=y[i]*2-40; yy[i]=x[i]*2-10}
spezzata(xx,yy, "grey")