1   package fi.jyu.mit.graphics;
2   
3   
4   /**
5    * Muunnosmatriisi
6    * @author Markus Kivioja
7    *
8    */
9   public class TMatrix extends Matrix{
10      
11      /**
12       * Luo uuden muunnosmatriisin
13       *
14       */
15      public TMatrix() {
16          super();
17      }
18      
19      /**
20       * Luo muunnosmatriisi kopion annetusta matriisista
21       * @param a kopioitava matriisi
22       */
23      public TMatrix(Matrix a) {
24          super(a);
25      }
26      
27      /**
28       * Luo uuden muunnosmatriisin joka muuntaa RRect nelikulmion SRect nelikulmioksi
29       * @param rRect reaalimaailman suorakaide
30       * @param sRect näytön suorakaiden johon muunnetaan
31       * @param equal onko x/1 aina 1, tosi/epätosi
32       */
33      public TMatrix(RRect rRect, SRect sRect, boolean equal) {
34          super();
35          double scale, xs, ys, dxf, dyf, dxt, dyt;
36          dxf = rRect.width();
37          dyf = rRect.height();
38          dxt = sRect.width();
39          dyt = sRect.height();
40          if ( dxf == 0 || dxt == 0) xs = 1; else xs = dxt/dxf;
41          if ( dyf == 0 || dyt == 0) ys = 1; else ys = dyt/dyf;
42          if ( equal ) {
43              scale = Math.abs(xs);
44              if (Math.abs(ys) < scale) scale = Math.abs(ys);
45              xs = Math.abs(xs)/xs*scale;
46              ys = Math.abs(ys)/ys*scale;
47          }
48          this.set(0, 0, xs);
49          this.set(1, 1, ys);
50          this.set(0, VSIZE-1, sRect.midX() - rRect.midX()*xs);
51          this.set(1, VSIZE-1, sRect.midY() - rRect.midY()*ys);
52      }
53      
54      /**
55       * Muuntaa 3D-pisteen tällä muunnosmatriisilla SPoint-olioksi
56       * @param x muunnettavan pisteen x-koordinaatti
57       * @param y muunnettavan pisteen y-koordinaatti
58       * @param z muunnettavan pisteen z-koordinaatti
59       * @return muunnettu piste SPoint-oliona
60       */
61  /*  public SPoint transform(double x, double y, double z) {
62          Vector vr = new Vector(x, y, z); // NOPMD
63          Vector vs = this.multiply(vr);   // NOPMD
64          SPoint r = new SPoint((int)round(vs.a(0)), (int)round(vs.a(1)));
65          return r; // NOPMD miten muuten voi palauttaa
66      }
67  */  
68      /**
69       * Muuntaa RPoint-olion tällä muunnomatriisilla SPoint-olioksi
70       * @param p muunnettava piste
71       * @return muunnettu piste SPoint-oliona
72       */
73  /*  public SPoint transform(RPoint p) {
74          Vector vr = new Vector(p.getX(), p.getY(), p.getZ()); // NOPMD
75          Vector vs = this.multiply(vr);                        // NOPMD
76          SPoint r = new SPoint((int)round(vs.a(0)), (int)round(vs.a(1)));
77          return r; // NOPMD miten muuten voi palauttaa
78      }
79  */  
80  }
81