1
2
3
4
5
6
7 package net.sourceforge.kamiwaai.geometricalgebra;
8
9 import junit.framework.TestCase;
10
11 /***
12 * @author Ginanjar Utama
13 *
14 * To change the template for this generated type comment go to Window -
15 * Preferences - Java - Code Generation - Code and Comments
16 */
17 public class MultiVectorTest extends TestCase {
18 ComplexNumber c1 = new ComplexNumber(1.0, 2.0);
19 ComplexNumber c2 = new ComplexNumber(3.0, 4.0);
20 ComplexNumber c3 = new ComplexNumber(5.0, 6.0);
21 ComplexNumber c4 = new ComplexNumber(7.0, 8.0);
22 ComplexNumber[] c1234 = { c1, c2, c3, c4 };
23 ComplexNumber[] c2341 = { c2, c3, c4, c1 };
24 ComplexNumber[] c3412 = { c3, c4, c1, c2 };
25 ComplexNumber[] c4123 = { c4, c1, c2, c3 };
26 ComplexQuat cq1 = new ComplexQuat(c1234);
27 ComplexQuat cq2 = new ComplexQuat(c2341);
28 ComplexQuat cq3 = new ComplexQuat(c3412);
29 ComplexQuat cq4 = new ComplexQuat(c4123);
30 ComplexQuat[] cq1234 = { cq1, cq2, cq3, cq4 };
31 ComplexQuat[] cq2341 = { cq2, cq3, cq4, cq1 };
32 MultiVector mv1 = new MultiVector(cq1234);
33 MultiVector mv2 = new MultiVector(cq2341);
34
35 public void testAddMultiVector() {
36 ComplexQuat[] cq12341 =
37 { cq1.add(cq2), cq2.add(cq3), cq3.add(cq4), cq4.add(cq1)};
38 MultiVector mv3 = new MultiVector(cq12341);
39 assertEquals(mv3, mv1.add(mv2));
40 assertFalse(mv1.equals(mv1.add(mv2)));
41 }
42 public void testSubMultiVector() {
43 ComplexQuat[] cq12341 =
44 { cq1.sub(cq2), cq2.sub(cq3), cq3.sub(cq4), cq4.sub(cq1)};
45 MultiVector mv3 = new MultiVector(cq12341);
46 assertEquals(mv3, mv1.sub(mv2));
47 assertFalse(mv1.equals(mv1.sub(mv2)));
48 }
49 public void testMultiplyMultiVector() {
50 ComplexNumber c12 = new ComplexNumber(16.0, -128.0);
51 ComplexNumber c23 = new ComplexNumber(0.0, 16.0);
52 ComplexNumber c34 = new ComplexNumber(16.0, -160.0);
53 ComplexNumber c41 = new ComplexNumber(0.0, 80.0);
54 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
55 ComplexQuat cq12341 = new ComplexQuat(c12341);
56
57 ComplexNumber c45 = new ComplexNumber(60.0, -400.0);
58 ComplexNumber c56 = new ComplexNumber(-20.0, -56.0);
59 ComplexNumber c67 = new ComplexNumber(-44.0, 224.0);
60 ComplexNumber c74 = new ComplexNumber(-20.0, 72.0);
61 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
62 ComplexQuat cq45675 = new ComplexQuat(c45675);
63
64 ComplexNumber c78 = new ComplexNumber(20.0, -56.0);
65 ComplexNumber c89 = new ComplexNumber(-44.0, 176.0);
66 ComplexNumber c90 = new ComplexNumber(-36.0, 136.0);
67 ComplexNumber c07 = new ComplexNumber(-44.0, 208.0);
68 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
69 ComplexQuat cq78907 = new ComplexQuat(c78907);
70
71 ComplexNumber c01 = new ComplexNumber(44.0, -176.0);
72 ComplexNumber c02 = new ComplexNumber(-20.0, 40.0);
73 ComplexNumber c03 = new ComplexNumber(-44.0, 272.0);
74 ComplexNumber c04 = new ComplexNumber(-36.0, 88.0);
75 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
76 ComplexQuat cq01235 = new ComplexQuat(c01234);
77
78 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
79
80 MultiVector mv3 = new MultiVector(cqarray);
81 assertEquals(mv3, mv1.mult(mv2));
82 assertFalse(mv1.equals(mv1.mult(mv2)));
83 }
84 public void testGetGrade0() {
85 ComplexNumber c12 = new ComplexNumber(1.0, 0.0);
86 ComplexNumber[] c0 =
87 { c12, ComplexNumber.ZERO, ComplexNumber.ZERO, ComplexNumber.ZERO };
88 ComplexQuat cq0 = new ComplexQuat(c0);
89 ComplexQuat[] cq0123 =
90 { cq0, ComplexQuat.ZERO, ComplexQuat.ZERO, ComplexQuat.ZERO };
91 MultiVector grade0 = new MultiVector(cq0123);
92 assertEquals(grade0, mv1.getGrade0());
93 assertFalse(mv1 == mv1.getGrade0());
94 }
95 public void testGetGrade1() {
96 ComplexNumber grade1n0 = new ComplexNumber(3.0, 0.0);
97 ComplexNumber[] grade1n =
98 {
99 grade1n0,
100 ComplexNumber.ZERO,
101 ComplexNumber.ZERO,
102 ComplexNumber.ZERO };
103 ComplexQuat cqGrade1n = new ComplexQuat(grade1n);
104
105 ComplexNumber grade1nb0 = new ComplexNumber(5.0, 0.0);
106 ComplexNumber[] grade1nb =
107 {
108 grade1nb0,
109 ComplexNumber.ZERO,
110 ComplexNumber.ZERO,
111 ComplexNumber.ZERO };
112 ComplexQuat cqGrade1nb = new ComplexQuat(grade1nb);
113
114 ComplexNumber grade1nnb1 = new ComplexNumber(0.0, 2.0);
115 ComplexNumber grade1nnb2 = new ComplexNumber(0.0, 4.0);
116 ComplexNumber grade1nnb3 = new ComplexNumber(0.0, 6.0);
117 ComplexNumber[] grade1nnb =
118 { ComplexNumber.ZERO, grade1nnb1, grade1nnb2, grade1nnb3 };
119 ComplexQuat cqGrade1nnb = new ComplexQuat(grade1nnb);
120 ComplexQuat[] cq0123 =
121 { ComplexQuat.ZERO, cqGrade1n, cqGrade1nb, cqGrade1nnb };
122
123 MultiVector grade1 = new MultiVector(cq0123);
124 assertEquals(grade1, mv1.getGrade1());
125 assertFalse(mv1 == mv1.getGrade1());
126 }
127 public void testGetGrade2() {
128 ComplexNumber grade2Sc1 = new ComplexNumber(3.0, 0.0);
129 ComplexNumber grade2Sc2 = new ComplexNumber(5.0, 0.0);
130 ComplexNumber grade2Sc3 = new ComplexNumber(7.0, 0.0);
131 ComplexNumber[] grade2Sc =
132 { ComplexNumber.ZERO, grade2Sc1, grade2Sc2, grade2Sc3 };
133
134 ComplexNumber grade2n1 = new ComplexNumber(0.0, 6.0);
135 ComplexNumber grade2n2 = new ComplexNumber(0.0, 8.0);
136 ComplexNumber grade2n3 = new ComplexNumber(0.0, 2.0);
137 ComplexNumber[] grade2n =
138 { ComplexNumber.ZERO, grade2n1, grade2n2, grade2n3 };
139
140 ComplexNumber grade2nb1 = new ComplexNumber(0.0, 8.0);
141 ComplexNumber grade2nb2 = new ComplexNumber(0.0, 2.0);
142 ComplexNumber grade2nb3 = new ComplexNumber(0.0, 4.0);
143 ComplexNumber[] grade2nb =
144 { ComplexNumber.ZERO, grade2nb1, grade2nb2, grade2nb3 };
145
146 ComplexNumber grade2nnb0 = new ComplexNumber(7.0, 0.0);
147 ComplexNumber[] grade2nnb =
148 {
149 grade2nnb0,
150 ComplexNumber.ZERO,
151 ComplexNumber.ZERO,
152 ComplexNumber.ZERO };
153
154 ComplexQuat cqGrade2sc = new ComplexQuat(grade2Sc);
155 ComplexQuat cqGrade2n = new ComplexQuat(grade2n);
156 ComplexQuat cqGrade2nb = new ComplexQuat(grade2nb);
157 ComplexQuat cqGrade2nnb = new ComplexQuat(grade2nnb);
158 ComplexQuat[] cqGrade2 =
159 { cqGrade2sc, cqGrade2n, cqGrade2nb, cqGrade2nnb };
160
161 MultiVector grade2 = new MultiVector(cqGrade2);
162
163
164
165 assertEquals(grade2, mv1.getGrade2());
166 assertFalse(mv1 == mv1.getGrade2());
167 }
168 public void testGetGrade3() {
169 ComplexNumber grade3Sc1 = new ComplexNumber(0.0, 4.0);
170 ComplexNumber grade3Sc2 = new ComplexNumber(0.0, 6.0);
171 ComplexNumber grade3Sc3 = new ComplexNumber(0.0, 8.0);
172 ComplexNumber[] grade3Sc =
173 { ComplexNumber.ZERO, grade3Sc1, grade3Sc2, grade3Sc3 };
174
175 ComplexNumber grade3n1 = new ComplexNumber(5.0, 0.0);
176 ComplexNumber grade3n2 = new ComplexNumber(7.0, 0.0);
177 ComplexNumber grade3n3 = new ComplexNumber(1.0, 0.0);
178 ComplexNumber[] grade3n =
179 { ComplexNumber.ZERO, grade3n1, grade3n2, grade3n3 };
180
181 ComplexNumber grade3nb1 = new ComplexNumber(7.0, 0.0);
182 ComplexNumber grade3nb2 = new ComplexNumber(1.0, 0.0);
183 ComplexNumber grade3nb3 = new ComplexNumber(3.0, 0.0);
184 ComplexNumber[] grade3nb =
185 { ComplexNumber.ZERO, grade3nb1, grade3nb2, grade3nb3 };
186
187 ComplexNumber grade3nnb0 = new ComplexNumber(0.0, 8.0);
188 ComplexNumber[] grade3nnb =
189 {
190 grade3nnb0,
191 ComplexNumber.ZERO,
192 ComplexNumber.ZERO,
193 ComplexNumber.ZERO };
194
195 ComplexQuat cqGrade3Sc = new ComplexQuat(grade3Sc);
196 ComplexQuat cqGrade3n = new ComplexQuat(grade3n);
197 ComplexQuat cqGrade3nb = new ComplexQuat(grade3nb);
198 ComplexQuat cqGrade3nnb = new ComplexQuat(grade3nnb);
199 ComplexQuat[] cqGrade3 =
200 { cqGrade3Sc, cqGrade3n, cqGrade3nb, cqGrade3nnb };
201 MultiVector grade3 = new MultiVector(cqGrade3);
202 assertEquals(grade3, mv1.getGrade3());
203 assertFalse(mv1 == mv1.getGrade3());
204 }
205 public void testGetGrade4() {
206 ComplexNumber grade4n0 = new ComplexNumber(0.0, 4.0);
207 ComplexNumber[] grade4n =
208 {
209 grade4n0,
210 ComplexNumber.ZERO,
211 ComplexNumber.ZERO,
212 ComplexNumber.ZERO };
213
214 ComplexNumber grade4nb0 = new ComplexNumber(0.0, 6.0);
215 ComplexNumber[] grade4nb =
216 {
217 grade4nb0,
218 ComplexNumber.ZERO,
219 ComplexNumber.ZERO,
220 ComplexNumber.ZERO };
221
222 ComplexNumber grade4nnb1 = new ComplexNumber(1.0, 0.0);
223 ComplexNumber grade4nnb2 = new ComplexNumber(3.0, 0.0);
224 ComplexNumber grade4nnb3 = new ComplexNumber(5.0, 0.0);
225 ComplexNumber[] grade4nnb =
226 { ComplexNumber.ZERO, grade4nnb1, grade4nnb2, grade4nnb3 };
227
228 ComplexQuat cqGrade4n = new ComplexQuat(grade4n);
229 ComplexQuat cqGrade4nb = new ComplexQuat(grade4nb);
230 ComplexQuat cqGrade4nnb = new ComplexQuat(grade4nnb);
231 ComplexQuat[] cqGrade4 =
232 { ComplexQuat.ZERO, cqGrade4n, cqGrade4nb, cqGrade4nnb };
233 MultiVector grade4 = new MultiVector(cqGrade4);
234 assertEquals(grade4, mv1.getGrade4());
235 assertFalse(mv1 == mv1.getGrade4());
236 }
237 public void testGetGrade5() {
238 ComplexNumber grade5Sc0 = new ComplexNumber(0.0, 2.0);
239 ComplexNumber[] grade5Sc =
240 {
241 grade5Sc0,
242 ComplexNumber.ZERO,
243 ComplexNumber.ZERO,
244 ComplexNumber.ZERO };
245
246 ComplexQuat cqGrade5Sc = new ComplexQuat(grade5Sc);
247 ComplexQuat[] cqGrade5 =
248 {
249 cqGrade5Sc,
250 ComplexQuat.ZERO,
251 ComplexQuat.ZERO,
252 ComplexQuat.ZERO };
253 MultiVector grade5 = new MultiVector(cqGrade5);
254 assertEquals(grade5, mv1.getGrade5());
255 assertFalse(mv1 == mv1.getGrade5());
256 }
257 public void testGetGradeByInt() {
258 assertEquals(mv1.getGrade(0), mv1.getGrade0());
259 assertEquals(mv1.getGrade(1), mv1.getGrade1());
260 assertEquals(mv1.getGrade(2), mv1.getGrade2());
261 assertEquals(mv1.getGrade(3), mv1.getGrade3());
262 assertEquals(mv1.getGrade(4), mv1.getGrade4());
263 assertEquals(mv1.getGrade(5), mv1.getGrade5());
264 }
265 public void testMagnitude(){
266 assertEquals("magnitude should be the same", mv1.magnitude(), 8.48528137423857, 0.0000000001);
267 assertEquals("magnitude should be the same", mv2.magnitude(), 8.48528137423857, 0.0000000001);
268 }
269 public void testNormalize(){
270 ComplexNumber c12 = new ComplexNumber(0.11785113019775793, 0.23570226039551587);
271 ComplexNumber c23 = new ComplexNumber(0.3535533905932738, 0.47140452079103173);
272 ComplexNumber c34 = new ComplexNumber(0.5892556509887896, 0.7071067811865476);
273 ComplexNumber c41 = new ComplexNumber(0.8249579113843055, 0.9428090415820635);
274 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
275 ComplexQuat cq12341 = new ComplexQuat(c12341);
276
277 ComplexNumber c45 = new ComplexNumber(0.3535533905932738, 0.47140452079103173);
278 ComplexNumber c56 = new ComplexNumber(0.5892556509887896, 0.7071067811865476);
279 ComplexNumber c67 = new ComplexNumber(0.8249579113843055, 0.9428090415820635);
280 ComplexNumber c74 = new ComplexNumber(0.11785113019775793, 0.23570226039551587);
281 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
282 ComplexQuat cq45675 = new ComplexQuat(c45675);
283
284 ComplexNumber c78 = new ComplexNumber(0.5892556509887896, 0.7071067811865476);
285 ComplexNumber c89 = new ComplexNumber(0.8249579113843055, 0.9428090415820635);
286 ComplexNumber c90 = new ComplexNumber(0.11785113019775793, 0.23570226039551587);
287 ComplexNumber c07 = new ComplexNumber(0.3535533905932738, 0.47140452079103173);
288 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
289 ComplexQuat cq78907 = new ComplexQuat(c78907);
290
291 ComplexNumber c01 = new ComplexNumber(0.8249579113843055, 0.9428090415820635);
292 ComplexNumber c02 = new ComplexNumber(0.11785113019775793, 0.23570226039551587);
293 ComplexNumber c03 = new ComplexNumber(0.3535533905932738, 0.47140452079103173);
294 ComplexNumber c04 = new ComplexNumber(0.5892556509887896, 0.7071067811865476);
295 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
296 ComplexQuat cq01235 = new ComplexQuat(c01234);
297
298 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
299
300 MultiVector mv3 = new MultiVector(cqarray);
301 assertEquals(mv3, mv1.normalize());
302 assertFalse(mv1 == mv1.mult(mv2));
303 }
304 public void testReverse(){
305 ComplexNumber c12 = new ComplexNumber(1.0, 2.0);
306 ComplexNumber c23 = new ComplexNumber(-3.0, -4.0);
307 ComplexNumber c34 = new ComplexNumber(-5.0, -6.0);
308 ComplexNumber c41 = new ComplexNumber(-7.0, -8.0);
309 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
310 ComplexQuat cq12341 = new ComplexQuat(c12341);
311
312 ComplexNumber c45 = new ComplexNumber(3.0, 4.0);
313 ComplexNumber c56 = new ComplexNumber(-5.0, -6.0);
314 ComplexNumber c67 = new ComplexNumber(-7.0, -8.0);
315 ComplexNumber c74 = new ComplexNumber(-1.0, -2.0);
316 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
317 ComplexQuat cq45675 = new ComplexQuat(c45675);
318
319 ComplexNumber c78 = new ComplexNumber(5.0, 6.0);
320 ComplexNumber c89 = new ComplexNumber(-7.0, -8.0);
321 ComplexNumber c90 = new ComplexNumber(-1.0, -2.0);
322 ComplexNumber c07 = new ComplexNumber(-3.0, -4.0);
323 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
324 ComplexQuat cq78907 = new ComplexQuat(c78907);
325
326 ComplexNumber c01 = new ComplexNumber(-7.0, -8.0);
327 ComplexNumber c02 = new ComplexNumber(1.0, 2.0);
328 ComplexNumber c03 = new ComplexNumber(3.0, 4.0);
329 ComplexNumber c04 = new ComplexNumber(5.0, 6.0);
330 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
331 ComplexQuat cq01235 = new ComplexQuat(c01234);
332
333 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
334
335 MultiVector mv3 = new MultiVector(cqarray);
336 assertEquals(mv3, mv1.reverse());
337 assertFalse(mv1 == mv1.reverse());
338 }
339 public void testPowerOf(){
340 try{
341 mv1.Powerof(-3);
342 fail();
343 } catch (IllegalArgumentException ignore) {
344
345 }
346 assertEquals(MultiVectors.One(), mv1.Powerof(0));
347 assertEquals(mv1, mv1.Powerof(1));
348 ComplexNumber c12 = new ComplexNumber(0.0, -16.0);
349 ComplexNumber c23 = new ComplexNumber(16.0, -160.0);
350 ComplexNumber c34 = new ComplexNumber(0.0, -48.0);
351 ComplexNumber c41 = new ComplexNumber(-16.0, 128.0);
352 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
353 ComplexQuat cq12341 = new ComplexQuat(c12341);
354
355 ComplexNumber c45 = new ComplexNumber(52.0, -264.0);
356 ComplexNumber c56 = new ComplexNumber(-12.0, -64.0);
357 ComplexNumber c67 = new ComplexNumber(-52.0, 232.0);
358 ComplexNumber c74 = new ComplexNumber(-28.0, 80.0);
359 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
360 ComplexQuat cq45675 = new ComplexQuat(c45675);
361
362 ComplexNumber c78 = new ComplexNumber(44.0, -208.0);
363 ComplexNumber c89 = new ComplexNumber(-36.0, 104.0);
364 ComplexNumber c90 = new ComplexNumber(-12.0, -16.0);
365 ComplexNumber c07 = new ComplexNumber(-52.0, 280.0);
366 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
367 ComplexQuat cq78907 = new ComplexQuat(c78907);
368
369 ComplexNumber c01 = new ComplexNumber(36.0, -216.0);
370 ComplexNumber c02 = new ComplexNumber(-12.0, 16.0);
371 ComplexNumber c03 = new ComplexNumber(-36.0, 216.0);
372 ComplexNumber c04 = new ComplexNumber(-60.0, 448.0);
373 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
374 ComplexQuat cq01235 = new ComplexQuat(c01234);
375
376 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
377
378 MultiVector mv3 = new MultiVector(cqarray);
379 assertEquals(mv3, mv1.Powerof(2));
380 assertFalse(mv1 == mv1.Powerof(2));
381 assertEquals(mv3.mult(mv1), mv1.Powerof(3));
382 }
383 public void testScProd(){
384 assertEquals("scalar product should be the same", 16.0, mv1.ScProd(mv2), 0.00000000000001);
385 assertEquals("scalar product should be simetric", mv2.ScProd(mv1), mv1.ScProd(mv2), 0.00000000000001);
386 }
387 public void testOutProd(){
388 ComplexNumber c12 = new ComplexNumber(3.0, -128.0);
389 ComplexNumber c23 = new ComplexNumber(10.0, -80.0);
390 ComplexNumber c34 = new ComplexNumber(30.0, -16.0);
391 ComplexNumber c41 = new ComplexNumber(18.0, 16.0);
392 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
393 ComplexQuat cq12341 = new ComplexQuat(c12341);
394
395 ComplexNumber c45 = new ComplexNumber(14.0, -200.0);
396 ComplexNumber c56 = new ComplexNumber(100.0, 28.0);
397 ComplexNumber c67 = new ComplexNumber(-12.0, 24.0);
398 ComplexNumber c74 = new ComplexNumber(76.0, 4.0);
399 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
400 ComplexQuat cq45675 = new ComplexQuat(c45675);
401
402 ComplexNumber c78 = new ComplexNumber(22.0, -40.0);
403 ComplexNumber c89 = new ComplexNumber(76.0, 20.0);
404 ComplexNumber c90 = new ComplexNumber(124.0, 8.0);
405 ComplexNumber c07 = new ComplexNumber(28.0, 20.0);
406 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
407 ComplexQuat cq78907 = new ComplexQuat(c78907);
408
409 ComplexNumber c01 = new ComplexNumber(18.0, -116.0);
410 ComplexNumber c02 = new ComplexNumber(12.0, 10.0);
411 ComplexNumber c03 = new ComplexNumber(116.0, 18.0);
412 ComplexNumber c04 = new ComplexNumber(28.0, 26.0);
413 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
414 ComplexQuat cq01235 = new ComplexQuat(c01234);
415
416 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
417
418 MultiVector mv3 = new MultiVector(cqarray);
419 assertEquals(mv3, mv1.OutProd(mv2));
420 }
421 public void testLContract(){
422 ComplexNumber c12 = new ComplexNumber(16.0, 4.0);
423 ComplexNumber c23 = new ComplexNumber(64.0, 20.0);
424 ComplexNumber c34 = new ComplexNumber(72.0, 24.0);
425 ComplexNumber c41 = new ComplexNumber(16.0, 32.0);
426 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
427 ComplexQuat cq12341 = new ComplexQuat(c12341);
428
429 ComplexNumber c45 = new ComplexNumber(-8.0, 18.0);
430 ComplexNumber c56 = new ComplexNumber(4.0, 24.0);
431 ComplexNumber c67 = new ComplexNumber(8.0, 156.0);
432 ComplexNumber c74 = new ComplexNumber(52.0, 24.0);
433 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
434 ComplexQuat cq45675 = new ComplexQuat(c45675);
435
436 ComplexNumber c78 = new ComplexNumber(36.0, 28.0);
437 ComplexNumber c89 = new ComplexNumber(-62.0, 76.0);
438 ComplexNumber c90 = new ComplexNumber(-62.0, 48.0);
439 ComplexNumber c07 = new ComplexNumber(-94.0, 116.0);
440 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
441 ComplexQuat cq78907 = new ComplexQuat(c78907);
442
443 ComplexNumber c01 = new ComplexNumber(-58.0, 24.0);
444 ComplexNumber c02 = new ComplexNumber(-5.0, 24.0);
445 ComplexNumber c03 = new ComplexNumber(-11.0, 144.0);
446 ComplexNumber c04 = new ComplexNumber(-17.0, 32.0);
447 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
448 ComplexQuat cq01235 = new ComplexQuat(c01234);
449
450 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
451
452 MultiVector mv3 = new MultiVector(cqarray);
453 assertEquals(mv3, mv1.Lcontract(mv2));
454 }
455 public void testRContract(){
456 ComplexNumber c12 = new ComplexNumber(16.0, 6.0);
457 ComplexNumber c23 = new ComplexNumber(-48.0, 28.0);
458 ComplexNumber c34 = new ComplexNumber(-72.0, 20.0);
459 ComplexNumber c41 = new ComplexNumber(-16.0, 32.0);
460 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
461 ComplexQuat cq12341 = new ComplexQuat(c12341);
462
463 ComplexNumber c45 = new ComplexNumber(68.0, 22.0);
464 ComplexNumber c56 = new ComplexNumber(-22.0, 24.0);
465 ComplexNumber c67 = new ComplexNumber(-22.0, 156.0);
466 ComplexNumber c74 = new ComplexNumber(-62.0, 32.0);
467 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
468 ComplexQuat cq45675 = new ComplexQuat(c45675);
469
470 ComplexNumber c78 = new ComplexNumber(-16.0, 32.0);
471 ComplexNumber c89 = new ComplexNumber(48.0, 76.0);
472 ComplexNumber c90 = new ComplexNumber(52.0, 48.0);
473 ComplexNumber c07 = new ComplexNumber(80.0, 124.0);
474 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
475 ComplexQuat cq78907 = new ComplexQuat(c78907);
476
477 ComplexNumber c01 = new ComplexNumber(102.0, 24.0);
478 ComplexNumber c02 = new ComplexNumber(-5.0, 16.0);
479 ComplexNumber c03 = new ComplexNumber(-3.0, 128.0);
480 ComplexNumber c04 = new ComplexNumber(-1.0, 56.0);
481 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
482 ComplexQuat cq01235 = new ComplexQuat(c01234);
483
484 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
485
486 MultiVector mv3 = new MultiVector(cqarray);
487 assertEquals(mv3, mv1.Rcontract(mv2));
488 }
489 public void testMultiplyByScalar(){
490 ComplexNumber c12 = new ComplexNumber(3.0, 6.0);
491 ComplexNumber c23 = new ComplexNumber(9.0, 12.0);
492 ComplexNumber c34 = new ComplexNumber(15.0, 18.0);
493 ComplexNumber c41 = new ComplexNumber(21.0, 24.0);
494 ComplexNumber[] c12341 = { c12, c23, c34, c41 };
495 ComplexQuat cq12341 = new ComplexQuat(c12341);
496
497 ComplexNumber c45 = new ComplexNumber(9.0, 12.0);
498 ComplexNumber c56 = new ComplexNumber(15.0, 18.0);
499 ComplexNumber c67 = new ComplexNumber(21.0, 24.0);
500 ComplexNumber c74 = new ComplexNumber(3.0, 6.0);
501 ComplexNumber[] c45675 = { c45, c56, c67, c74 };
502 ComplexQuat cq45675 = new ComplexQuat(c45675);
503
504 ComplexNumber c78 = new ComplexNumber(15.0, 18.0);
505 ComplexNumber c89 = new ComplexNumber(21.0, 24.0);
506 ComplexNumber c90 = new ComplexNumber(3.0, 6.0);
507 ComplexNumber c07 = new ComplexNumber(9.0, 12.0);
508 ComplexNumber[] c78907 = { c78, c89, c90, c07 };
509 ComplexQuat cq78907 = new ComplexQuat(c78907);
510
511 ComplexNumber c01 = new ComplexNumber(21.0, 24.0);
512 ComplexNumber c02 = new ComplexNumber(3.0, 6.0);
513 ComplexNumber c03 = new ComplexNumber(9.0, 12.0);
514 ComplexNumber c04 = new ComplexNumber(15.0, 18.0);
515 ComplexNumber[] c01234 = { c01, c02, c03, c04 };
516 ComplexQuat cq01235 = new ComplexQuat(c01234);
517
518 ComplexQuat[] cqarray = { cq12341, cq45675, cq78907, cq01235 };
519
520 MultiVector mv3 = new MultiVector(cqarray);
521 assertEquals(mv3, mv1.multSc(3));
522 assertEquals(mv1, mv1.multSc(1));
523 assertEquals(MultiVectors.Zero(), mv1.multSc(0));
524 }
525 public void test3DMVector(){
526 assertEquals(mv1.get3DMVector(), mv1.getGrade1().OutProd(MultiVectors.N()).mult(MultiVectors.N()));
527 assertFalse(mv1.get3DMVector() == mv1.getGrade1().OutProd(MultiVectors.N()).mult(MultiVectors.N()));
528 }
529 public static void main(String[] args) {
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546 MultiVectorTest test = new MultiVectorTest();
547 System.out.println(test.mv1);
548
549
550
551
552 System.out.println(test.mv1.getGrade0());
553 System.out.println(test.mv1.getGrade1());
554 System.out.println(test.mv1.getGrade2());
555 System.out.println(test.mv1.getGrade3());
556 System.out.println(test.mv1.getGrade4());
557 System.out.println(test.mv1.getGrade5());
558
559 System.out.println(test.mv2);
560 System.out.println(test.mv2.getGrade0());
561 System.out.println(test.mv2.getGrade1());
562 System.out.println(test.mv2.getGrade2());
563 System.out.println(test.mv2.getGrade3());
564 System.out.println(test.mv2.getGrade4());
565 System.out.println(test.mv2.getGrade5());
566 System.out.println(test.mv1.magnitude());
567 System.out.println(test.mv2.magnitude());
568 System.out.println(test.mv1.normalize());
569 System.out.println(test.mv2.normalize());
570 System.out.println(test.mv1.reverse());
571 System.out.println(test.mv2.reverse());
572
573 System.out.println(test.mv1.Powerof(0));
574 System.out.println(test.mv1.Powerof(1));
575 System.out.println(test.mv1.Powerof(2));
576 System.out.println(test.mv1);
577 test.mv1.show();
578 System.out.println(test.mv1.ScProd(test.mv2));
579 System.out.println(test.mv1.OutProd(test.mv2));
580 System.out.println(test.mv2.OutProd(test.mv1));
581 System.out.println(test.mv1.Lcontract(test.mv2));
582 System.out.println(test.mv1.Rcontract(test.mv2));
583 System.out.println(test.mv2.Lcontract(test.mv1));
584 System.out.println(test.mv2.Rcontract(test.mv1));
585 System.out.println(test.mv1.multSc(3));
586 System.out.println(test.mv1.get3DMVector());
587 System.out.println(test.mv2.get3DMVector());
588 }
589 }