Funkcje 3D-punktowo
Janusz Sobieraj - 28 LO

Wykres z=F(x,y) rysowany punktowo, z "horyzontem"

Wykresem z=F(x,y) jest powierzchnia, której współrzędne wszystkich punktów można oczywiście wyliczyć. To bardzo wygodna sytuacja.

Oto procedura rysująca taki wykres.

void  rysuj3D(Graphics g) 
{ punkt3d p=new punkt3d(0,0,0); 

for(p.y=y_m;p.y<y_M;p.y+=0.2) 
   for(p.x=x_m;p.x<x_M;p.x+=0.02) 
   { 
    p.z=f(p.x,p.y); 
    _3d.punkt(g,p); 
   } 
} 
Podwójna pętla przegląda dziedzinę poziomymi liniami (Y), od lewego do prawego brzegu (X). Pozwoli to łatwo zorganizować proces oceny widoczności każdego punktu wykresu. Oczywiście będziemy rysowali tylko te widoczne.

Posłużymy się horyzontem, którego "wysokość" będzie notowana w tablicy:
double[] h=new double[getWidth()];

void  widoczny(Graphics g,pkt3d p) 
{ 
  int ktory ; 
  pkt2d pe=_3d.rzut(p); // może będzie rysowany 
  ktory=lo28.cal_x(pe.x); // który pkt horyzontu 

  if(ktory>-1&&ktory<getWidth( )) 
  { 
    if(pe.y>h[ktory]) 
      { 
        lo28.punkt(g,pe); 
        h[ktory]=pe.y; 
      } 
  } 
} 
//---------------------------------------------- 
void  rysuj3D(Graphics g) 
{ punkt3d p=new punkt3d(0,0,0); 

  for(p.y=y_min;p.y<y_max;p.y+=0.2) 
   for(p.x=x_min;p.x<x_max;p.x+=0.02) 
       widoczny(g,p); 
}
Dla każdego ewentualnie rysowanego punktu p wykresu, obliczymy najpierw jego nr w tablicy horyzontalnej. Punkt ocenimy jako widoczny jeśli p.y>h[nr]. Narysujemy go i zmodyfikujemy ten fragment horyzontu :
h[nr]=p.y;. Obok komplet procedur.