samer@0
|
1 package samer.j3d;
|
samer@0
|
2
|
samer@0
|
3 import samer.core.types.*;
|
samer@0
|
4 import samer.maths.*;
|
samer@0
|
5 import java.util.*;
|
samer@0
|
6 import java.awt.Color;
|
samer@0
|
7 import javax.media.j3d.*;
|
samer@0
|
8 import javax.vecmath.*;
|
samer@0
|
9
|
samer@0
|
10
|
samer@0
|
11 public class MatrixPoints4D extends PointArray implements Observer
|
samer@0
|
12 {
|
samer@0
|
13 int N; // number of points
|
samer@0
|
14 Matrix P; // 3d positions of points
|
samer@0
|
15 VVector A; // scalar activations
|
samer@0
|
16 VDouble K; // scaling factor for activations
|
samer@0
|
17
|
samer@0
|
18 Color4f carray[];
|
samer@0
|
19
|
samer@0
|
20 public MatrixPoints4D(Matrix points, VVector activities)
|
samer@0
|
21 {
|
samer@0
|
22 super(points.getRowDimension(), COORDINATES | COLOR_4);
|
samer@0
|
23
|
samer@0
|
24 N=points.getRowDimension();
|
samer@0
|
25 P=points;
|
samer@0
|
26 A=activities;
|
samer@0
|
27 K=new VDouble("scale",1);
|
samer@0
|
28
|
samer@0
|
29 carray=new Color4f[N];
|
samer@0
|
30 for (int i=0; i<N; i++) carray[i]=new Color4f();
|
samer@0
|
31
|
samer@0
|
32 // set capabilities for subsequent updates
|
samer@0
|
33 setCapability(ALLOW_COORDINATE_WRITE);
|
samer@0
|
34 setCapability(ALLOW_COLOR_WRITE);
|
samer@0
|
35
|
samer@0
|
36 updatePoints();
|
samer@0
|
37 updateActivities();
|
samer@0
|
38
|
samer@0
|
39 A.addObserver(this);
|
samer@0
|
40 P.addObserver(new Observer () {
|
samer@0
|
41 public void update(Observable o, Object a) {
|
samer@0
|
42 updatePoints();
|
samer@0
|
43 }
|
samer@0
|
44 });
|
samer@0
|
45 }
|
samer@0
|
46
|
samer@0
|
47
|
samer@0
|
48 public void update(Observable o, Object a)
|
samer@0
|
49 {
|
samer@0
|
50 updateActivities();
|
samer@0
|
51 }
|
samer@0
|
52
|
samer@0
|
53 public void updatePoints()
|
samer@0
|
54 {
|
samer@0
|
55 // load points into point array
|
samer@0
|
56 double [][] PA=P.getArray();
|
samer@0
|
57 double [] row;
|
samer@0
|
58
|
samer@0
|
59 for (int i=0; i<N; i++) {
|
samer@0
|
60 row=PA[i];
|
samer@0
|
61 setCoordinate(i,row);
|
samer@0
|
62
|
samer@0
|
63 // choose color according to 4th dimension
|
samer@0
|
64 carray[i].set(Color.getHSBColor((float)(row[3]*0.3)+0.16f,1f,1f));
|
samer@0
|
65 }
|
samer@0
|
66 }
|
samer@0
|
67
|
samer@0
|
68 public void updateActivities()
|
samer@0
|
69 {
|
samer@0
|
70 // load colours
|
samer@0
|
71 double [] a=A.array();
|
samer@0
|
72 double k=K.value;
|
samer@0
|
73
|
samer@0
|
74 for (int i=0; i<N; i++) {
|
samer@0
|
75 float ai=(float)(a[i]*k);
|
samer@0
|
76 carray[i].w=ai;
|
samer@0
|
77 }
|
samer@0
|
78 setColors(0,carray);
|
samer@0
|
79 }
|
samer@0
|
80 }
|