Vector.java |
1 package fi.jyu.mit.graphics; 2 3 /** 4 * Luokka 4x1 vektoreille 5 * @author Markus Kivioja 6 * 7 */ 8 public class Vector { 9 10 private final static int VSIZE = 4; 11 private double[] ar = new double[VSIZE]; 12 13 /** 14 * Luo uuden 4x1 vektorin (0.0, 0.0, 0.0, 1.0)T 15 * 16 */ 17 public Vector() { 18 ar[0] = 0.0; 19 ar[1] = 0.0; 20 ar[2] = 0.0; 21 ar[3] = 1.0; 22 } 23 24 /** 25 * Luo uuden 4x1 vektorin annetuista alkioista siten, että viimeinen alkio on 1.0 26 * @param a0 alkio (0, 0) 27 * @param a1 alkio (1, 0) 28 * @param a2 alkio (2, 0) 29 */ 30 public Vector(double a0, double a1, double a2) { 31 ar[0] = a0; 32 ar[1] = a1; 33 ar[2] = a2; 34 ar[3] = 1.0; 35 } 36 37 /** 38 * Luo uuden 4x1 vektorin jossa annetussa paikassa on annettu alkio 39 * @param i paikka johon alkio asetetaan 40 * @param ai asetettava alkio 41 */ 42 public Vector(int i, double ai) { 43 for (int j = 0; j < VSIZE; j++) ar[j] = 0.0; 44 ar[i] = ai; 45 } 46 47 /** 48 * Asettaa vektorin annettuun paikkaan annetun alkion 49 * @param i paikka johon alkio asetetaan 50 * @param ai asetettava alkio 51 * @return tämä vektori muutoksen jälkeen 52 */ 53 public Vector set(int i, double ai) { // NOPMD, PMD sotkee väärään vektoriin 54 this.ar[i] = ai; 55 return this; 56 } 57 58 /** 59 * Asettaa vektorin kolme ensimmäistä alkiota 60 * @param x alkio (0, 0) 61 * @param y alkio (1, 0) 62 * @param z alkio (2, 0) 63 * @return tämä vektori muutoksen jälkeen 64 */ 65 public Vector set(double x, double y, double z) { // NOPMD 66 this.ar[0] = x; 67 this.ar[1] = y; 68 this.ar[2] = z; 69 return this; 70 } 71 72 /** 73 * Asettaa vektorin kaksi ensimmäistä alkiota 74 * @param x alkio (0, 0) 75 * @param y alkio (1, 0) 76 * @return tämä vektori muutoksen jälkeen 77 */ 78 public Vector set(double x, double y) { // NOPMD 79 this.ar[0] = x; 80 this.ar[1] = y; 81 return this; 82 } 83 84 /** 85 * Laskee tämän ja annetun vektorin sisätulon 86 * @param b vektori jonka kanssa sisätulo lasketaan 87 * @return tämän ja annetun vektorin sisätulo 88 */ 89 public double innerProduct(Vector b) { // NOPMD 90 double s = 0; 91 for (int i = 0; i < VSIZE; i++) 92 s += ar[i] * b.ar[i]; 93 return s; 94 } 95 96 /** 97 * Kertoo tätä vektoria annetulla skalaarilla 98 * @param y kertova skalaari 99 * @return tämä vektori kerrottuna annetulla skalaarilla 100 */ 101 public Vector scalarProduct(double y) { // NOPMD 102 Vector p = new Vector(0, 0, 0); // NOPMD 103 for (int i = 0; i < VSIZE; i++) 104 p.ar[i] = this.ar[i]*y; 105 return p; 106 } 107 108 /** 109 * Summaa tähän vektoriin annetun vektorin ja palauttaa tuloksen 110 * @param v summattava vektori 111 * @return tämän vektorin ja annetun vektorin summa 112 */ 113 public Vector sum(Vector v) { 114 Vector sum = new Vector(); 115 for (int i = 0; i < VSIZE; i++) { 116 sum.set(i, this.a(i)+v.a(i)); 117 } 118 return sum; 119 } 120 121 /** 122 * Palauttaa tämän vektorin annetussa paikassa olevan alkion 123 * @param i paikka josta alkio halutaan 124 * @return annetussa paikassa oleva alkio 125 */ 126 public double a(int i) { // NOPMD, kelpaa tässä lyhytkin nimi 127 return this.ar[i]; 128 } 129 } 130