Figury Chladniego 3D
Janusz Sobieraj - 28 LO

Figury Chladniego - interpretacja 3D

Tak można sobie wyobrazić 3-wymiarowy wizerunek naszych figur. Narysowaliśmy (dość rzetelnie) po prostu wykres funkcji F(x,y)=sin(ax)sin(by)cos(α)+sin(bx)sin(ay)sin(α) gdzie Dx=Dy=<0 , π>
Ot fragment kodu w podstawowej wersji:
Color JakiKolor(pkt2d w) 
{int nr; 
 double y=f(w); 
 nr=(int)(Math.abs(y)/0.05); 
 if(y>0) 
   if(nr<20) return(pal_r[nr]); 
     else return(Color.red); 
   else 
    if(nr<20) return(pal_b[nr]); 
      else return(pal_b[19]); 
} 
//------------------------------------------------------- 
void rysujCH3D(Graphics g) 
{ pkt2d p=new pkt2d(0,0); 

  for(p.y=y_min;p.y<y_max;p.y+=0.03) 
   for(p.x=x_min;p.x<x_max;p.x+=0.003) 
    { 
      g.setColor(JakiKolor(p)); 
      _3d.punkt(g,_3d.p3d(p.x,p.y,f(p))); 
    } 
} 

Przede wszystkim trzeba zdecydować się na model rzutu w jakim wykona się rysunek. Ja wykonałem w rzucie aksonometrycznym (zobacz artykuł), ale równie dobrze może to być rzut perspektywiczny.
W wybranym modelu zdefiniowałem klasę _3d, a tam metodę _3d.punkt, która wykreśla punkt 3D(x,y,z).
Oczywiście należy przeskalować (powiększyć i przesunąć) otrzymaną płaszczyznę. Wyróżniona linia kodu przyjmie wtedy postać:
(kx*(p.x-s.x),ky*(p.y-s.y),f(p)));
No i oczywiście problem widoczności punktów płaszczyzny...