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