-
- Wstęp
- Klasa pkt3d
- Rzut równoległy
- Rzut perpektywiczny
- Jak rysować bryły
- Widoczność ściany
- Oświetlenie wielościanu
- Wykres funkcji z=f(x,y)
-
|
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.
|