1   package sample;
2   
3   
4   import fi.jyu.mit.graphics.*;
5   import static java.lang.Math.*;
6   
7   
8   /**
9    * Esimerkki 3D-pinnan piirtämisestä.
10   * Esimerkki myös miten pitää kirjoittaa, jotta samasta koodista saa 
11   * helposti sekä sovelluksen että sovelman (Applet)
12   * @author vesal
13   */
14  public class FunctionR2ASample {
15  
16      /**
17       * Luokka sin*cos-funktion käsittelemiseksi.
18       */
19      public static class SinCos implements FunctionR2R {
20        /**
21         * Luodaan stattinen sini-funktio kaikkien käyttöön.
22         */  
23        public static final FunctionR2R sincos = new SinCos(); // NOPMD nimi saa kelvata
24  
25        /**
26         * sin*cos-funktion arvo pisteessä x 
27         * @param x mista arvo lasketaan
28         * @param y mista arvo lasketaan
29         * @return sin(x)*cos(y) 
30         */
31        @Override
32        public double f(double x, double y) {  // NOPMD, nyt f on hyva nimi
33          return sin(x)*cos(y);
34        }
35      }
36  
37      /**
38       * ALutetaan paneeli niin, että alsustus kelpaa Window-luokalle ja EasyApplet-luokalle
39       * @param panel paneli joka laustetaan
40       * @return panel
41       */
42      public static SpacePanel initPanel(SpacePanel panel) {
43          panel.scale(-9,-9,9,9);
44          panel.add(new Axis(15, 15, 15));
45          panel.add(new FunctionMapR2R(SinCos.sincos,-2*PI,-2*PI,2*PI,2*PI));
46          panel.rotate(Axis.X, 50);
47          panel.rotate(Axis.Y, 20);
48          return panel;
49      }
50      
51      /**
52       * Pääohjelma sovellusta varten
53       * @param args ei käytössä
54       */
55      public static void main(String[] args) {
56          Window window = new Window();
57          initPanel(window.getPanel());
58          window.showWindow();
59  //      new Rotator(window,Axis.Z,5,50);
60          window.setTouchPad(true, true);
61          window.setControlButtons(true);
62              
63      }
64      
65      /**
66       * Applet luokka samasta asiasta.  Tämä pitää ajaa
67       * applettina nimellä FunctionR2ASample$Applet
68       * TODO: Onko tuo em. oikein? 
69       */
70      public static class Applet extends EasyApplet { 
71          private static final long serialVersionUID = 8729837737198762878L;
72  
73          /**
74           * Alustetaan Apletin yleiset tiedot luomalla
75           * "ohjainlevy" ja ohjainnappulat.
76           * @see fi.jyu.mit.graphics.EasyApplet#init()
77           */
78          @Override
79          public void init() {
80              this.setTouchPad(true, true);
81              this.setControlButtons(true);
82              initPanel(getPanel());
83          }
84      }
85  
86  }
87