| 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