| TMatrix.java |
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