static Vertices conformation;
static double transform[D3][D3]= {{1,0,0}, {0,1,0}, {0,0,1}};
-STATIC_GSL_MATRIX(transform);
+static GSL_MATRIX(transform);
const char *input_filename;
}
static void transform_coordinates(void) {
- /*
- static double result[D3];
- static const gsl_vector result_gsl= { D3,1,&result[0]; }
+ double result[D3];
+ GSL_VECTOR(result);
+ gsl_vector input_gsl= { D3,1 };
- int v;
+ int v, k;
-
FOR_VERTEX(v) {
- GA( gsl_blas_dgemv(CblasNoTrans,
- }*/
+ input_gsl.data= &conformation[v][0];
+ GA( gsl_blas_dgemv(CblasNoTrans, 1.0,&transform_gsl, &input_gsl,
+ 0.0, &result_gsl) );
+ K conformation[v][k]= result[k];
+ }
}
static void addtriangle(int va, int vb, int vc) {
static void drag_none_abandon(void) { }
DRAG(none);
+static void pmatrix(const char *n, double m[D3][D3]) {
+ int j,k;
+ for (j=0; j<D3; j++) {
+ printf("%10s [ ",n);
+ K printf("%# f ",m[j][k]);
+ printf("]\n");
+ n="";
+ }
+}
+
+#define PMATRIX(x) pmatrix(#x,x);
+
static void drag_rotate_delta(double dx, double dy) {
/* We multiple our transformation matrix by this matrix:
* [ 1 0 0 ]
*/
static double rotateby[D3][D3]= {{1,0,0},{0,1,0},{-20,-20,1}};
- STATIC_GSL_MATRIX(rotateby);
+ static GSL_MATRIX(rotateby);
- static double qr[D3][D3];
- STATIC_GSL_MATRIX(qr);
+ double qr[D3][D3];
+ gsl_matrix qr_gsl= { D3,D3,D3,&qr[0][0] };
- static double tau[D3];
- STATIC_GSL_VECTOR(tau);
+ double tau[D3];
+ GSL_VECTOR(tau);
- int k;
-
- K rotateby[k][k]= 1;
- rotateby[0][2]= dx;
- rotateby[1][2]= dy;
+ rotateby[2][0]= dx;
+ rotateby[2][1]= dy;
+
+ PMATRIX(rotateby);
GA( gsl_blas_dgemm(CblasNoTrans,CblasNoTrans, 1.0,
&rotateby_gsl,&transform_gsl, 0.0,&qr_gsl) );
+
+ PMATRIX(rotateby);
+
GA( gsl_linalg_QR_decomp(&qr_gsl, &tau_gsl) );
GA( gsl_linalg_QR_unpack(&qr_gsl, &tau_gsl,
&transform_gsl, &rotateby_gsl /*dummy*/) );
+ PMATRIX(transform);
+ PMATRIX(rotateby);
+
printf("drag_rotate_delta...\n");
show();
}
case ConfigureNotify: event_config(&event.xconfigure); break;
case MotionNotify:
+#if 0
motion_x= event.xmotion.x;
motion_y= event.xmotion.y;
motion_deferred= 1;
+#endif
continue;
default: