# Ecco un possibile modo di tracciare i grafici di alcune
# equazioni di due variabili:
# (x-2*y)^2+3*y = 4,   (x-y)*(x+2*y)+3*y = 4,
# 0.5*x^2+y^2+3*y = 4, (x+y)*(x-y) = 0
# Scelgo la parte di piano in cui tracciare i grafici
# e prendo, ad es., 1000 punti in ciascuno dei due intervalli
x1 <- -5; x2 <- 5; y1 <- -5; y2 <- 5
x <- seq(x1,x2,len=1000); y <- seq(y1,y2,len=1000)
# Considero le funzioni che eguagliate a 0 siano equivalenti alle equazioni
f <- function(x,y) (x-2*y)^2+3*y - 4
g <- function(x,y) (x-y)*(x+2*y)+3*y-4
h <- function(x,y) 0.5*x^2+y^2+3*y-4
k <- function(x,y) (x+y)*(x-y)
# Con le seguente riga traccio la curva f(x,y)=0 (lwd sceglie lo spessore, col
# il colore; metto asp=1 se voglio il sistema momometrico, se no lo tolgo)
#   [in realtà viene tracciata la curva di livello alla quota 0 della
#       superficie z = f(x,y), ma non ci preoccupiamo di questo]
z <- outer(x,y,f); contour(x,y,z,levels=0,drawlabels=FALSE, lwd=3,col="blue",asp=1)
abline(h=axTicks(2), v=axTicks(1),lty=3,col="blue")
abline(h=0, v=0,lty=2,col="blue")
# Traccio, analogamente, gli altri grafici.
z <- outer(x,y,g); contour(x,y,z,levels=0,lwd=3,col="red",add=TRUE,drawlabels=FALSE)
z <- outer(x,y,h); contour(x,y,z,levels=0,lwd=3,col="green",add=TRUE,drawlabels=FALSE)
z <- outer(x,y,k); contour(x,y,z,levels=0,lwd=3,col="orange",add=TRUE,drawlabels=FALSE)
# Ottengo:

#
# Caricando questo file farei tutto molto più semplicemente:
source("http://macosa.dima.unige.it/r.R") ]
f <- function(x,y) (x-2*y)^2+3*y - 4
g <- function(x,y) (x-y)*(x+2*y)+3*y-4
h <- function(x,y) 0.5*x^2+y^2+3*y-4
k <- function(x,y) (x+y)*(x-y)
noBox=1; boxM(-5,5, -5,5)
curva(f,"blue"); curva(g,"red")
curva(h,"green"); curva(k,"orange")
#
#
#
# Volendo potrei procedere nel seguente modo (evita il tracciamento di tratti
# di curva inesistenti che si potrebbe avere in alcuni casi particolari col
# procedimento precedente)
# Viene scandito il piano in (n+1)*(n+1) punti e viene calcolato
# se l'equazione è ivi verificata (a meno di un certo ε)
x1 <- y1 <- -5; x2 <- y2 <- 5
plot(c(x1,x2),c(y1,y2),type="n",xlab="", ylab="",asp=1)
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3)
abline(v=0,h=0)
n <- 500; dx <- (x2-x1)/n; dy <- (y2-y1)/n; I <- 0:n; J <- 0:n
for(i in I) for(j in J) {x <- x1+dx*i;y <- y1+dy*j;
  if (abs((x-y)*(x+2*y)+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="red")}

# Vediamo come ottenere il grafico di tutte 4:
plot(c(x1,x2),c(y1,y2),type="n",xlab="", ylab="",asp=1)
abline(v=seq(x1,x2,1),h=seq(y1,y2,1),lty=3)
abline(v=0,h=0)
for(i in I) for(j in J) {x <- x1+dx*i;y <- y1+dy*j;
 if (abs((x-2*y)^2+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="blue");
 if (abs((x-y)*(x+2*y)+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="red")
 if (abs(0.5*x^2+y^2+3*y-4)<0.05) points(x,y,pch=".",cex=3,col="green")
 if (abs((x+y)*(x-y))<0.01) points(x,y,pch=".",cex=3,col="orange")}