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