clear;
close all;

t = linspace(-2,2,11);
[x,y] = meshgrid(t);

a1 = 2;
a2 = -2;
b  = 1; 

z = a1*x + a2*y + b;

% ponto do plano de onde parte o vetor normal

x0 = 1;
y0 = 1;
z0 = a1*x0 + a2*y0 + b;

% prepara o titulo para as figuras

sinal = ' +';
titulo = ['f(x,y) = '];
if(a1~=0)
  titulo = [titulo,num2str(a1),'x'];
end
if(a2~=0)
  titulo = [titulo,sinal((a1~=0)*(a2>0)+1),num2str(a2),'y'];
end
if(b~=0)
  titulo = [titulo,sinal((a1^2+a2^2~=0)*(b>0)+1),num2str(b)];
end

% Desenha graficos

surf(x,y,z)
hold on

plot3([x0,x0-a1],[y0,y0-a2],[z0,z0+1],'k','linewidth',2)
title(titulo)
grid
axis equal
view(30,30)

if(a1^2+a2^2~=0) % grafico adicional (exceto se f(x,y)=b)
  
  figure

  unit = [-a2,a1,0];
  unit = unit/norm(unit);
  azIn = atan2(unit(1),-unit(2))*180/pi;
  elIn = atan2(unit(3),sqrt(unit(1)^2+unit(2)^2))*180/pi;
  surf(x,y,z)
  hold on
  
  plot3([x0,x0-a1],[y0,y0-a2],[z0,z0+1],'k','linewidth',2)
  title(titulo)
  grid
  axis equal
  view(azIn,elIn)
  
end