void Prog::run() { d.prepare(); while (!d.is_quit_requested()) { if (d.is_draw_requested()) { al_clear_to_color(al_map_rgb(128, 128, 128)); draw_samples(); d.draw(); al_flip_display(); } d.run_step(true); } }
int main(int argc, char *argv[]){ if(argc > 1){ srand(atoi(argv[1])); } unsigned int i, j, k; unsigned int n = 256, m; double d1[4], d2[4]; geom_shape2d *s2d; geom_shape3d *s3d; geom_aabb2d b2d1, b2d2; geom_aabb3d b3d1, b3d2; if(0){ printf("Testing ellipse and polygon\n"); FILE *fp = fopen("test_shapes2d.ps", "wb"); print_postscript_header(fp); // Test ellipse s2d = (geom_shape2d*)malloc(sizeof(geom_shape2d)); s2d->type = GEOM_SHAPE2D_ELLIPSE; geom_randd(2, s2d->org); geom_randd(4, s2d->s.ellipse.A); s2d->s.ellipse.B[0] = s2d->s.ellipse.A[0]; s2d->s.ellipse.B[1] = s2d->s.ellipse.A[1]; s2d->s.ellipse.B[2] = s2d->s.ellipse.A[2]; s2d->s.ellipse.B[3] = s2d->s.ellipse.A[3]; geom_matinv2d(s2d->s.ellipse.B); // Draw axes fprintf(fp, "%g %g moveto %g %g rlineto stroke\n", s2d->org[0], s2d->org[1], s2d->s.ellipse.A[0], s2d->s.ellipse.A[1] ); fprintf(fp, "%g %g moveto %g %g rlineto stroke\n", s2d->org[0], s2d->org[1], s2d->s.ellipse.A[2], s2d->s.ellipse.A[3] ); geom_shape2d_output_postscript(s2d, fp, 0); geom_shape2d_get_aabb(s2d, &b2d1); geom_aabb2d_output_postscript(&b2d1, fp, 0); fprintf(fp, "0 1 0 setrgbcolor\n"); for(i = 0; i < n; ++i){ geom_randd(2, d1); if(geom_aabb2d_contains(&b2d1, d1)){ fprintf(fp, "%g %g 0.01 0 360 arc fill\n", d1[0], d1[1]); } } fprintf(fp, "0 0 1 setrgbcolor\n"); for(i = 0; i < n; ++i){ geom_randd(2, d1); if(geom_shape2d_contains(s2d, d1)){ fprintf(fp, "%g %g 0.01 0 360 arc fill\n", d1[0], d1[1]); } } free(s2d); // Test polygon m = 7; s2d = (geom_shape2d*)malloc(sizeof(geom_shape2d) + 2*(m-1)*sizeof(double)); s2d->type = GEOM_SHAPE2D_POLYGON; s2d->s.polygon.nv = m; geom_randd(2, s2d->org); geom_randd(2*m, s2d->s.polygon.v); geom_shape2d_output_postscript(s2d, fp, 0); geom_shape2d_get_aabb(s2d, &b2d2); geom_aabb2d_output_postscript(&b2d2, fp, 0); fprintf(fp, "1 0 0 setrgbcolor\n"); for(i = 0; i < n; ++i){ geom_randd(2, d1); if(geom_shape2d_contains(s2d, d1)){ fprintf(fp, "%g %g 0.01 0 360 arc fill\n", d1[0], d1[1]); } } free(s2d); geom_aabb2d_union(&b2d1, &b2d2); geom_aabb2d_output_postscript(&b2d1, fp, 0); print_postscript_footer(fp); fclose(fp); printf("Check file test_shapes2d.ps\n"); } n = 16; if(1){ printf("Testing tet\n"); FILE *fp = fopen("test_shapes3d_tet.pvf", "wb"); fprintf(fp, "PVF(1)\n"); fprintf(fp, "bs = %g\n", 1./n); s3d = (geom_shape3d*)malloc(sizeof(geom_shape3d)); s3d->type = GEOM_SHAPE3D_TET; geom_randd(3, s3d->org); //s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; geom_randd(12, s3d->s.tet.v); geom_shape3d_init(s3d); geom_shape3d_get_aabb(s3d, &b3d1); draw_aabb3(fp, &b3d1); draw_samples(fp, s3d, n); free(s3d); } if(0){ printf("Testing ellipsoid\n"); FILE *fp = fopen("test_shapes3d_ellipsoid.pvf", "wb"); fprintf(fp, "PVF(1)\n"); fprintf(fp, "bs = %g\n", 1./n); s3d = (geom_shape3d*)malloc(sizeof(geom_shape3d)); s3d->type = GEOM_SHAPE3D_ELLIPSOID; geom_randd(3, s3d->org); s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; geom_randd(9, s3d->s.ellipsoid.A); for(i = 0; i < 9; ++i){ s3d->s.ellipsoid.B[i] = s3d->s.ellipsoid.A[i]; } geom_matinv3d(s3d->s.ellipsoid.B); geom_shape3d_get_aabb(s3d, &b3d1); draw_aabb3(fp, &b3d1); draw_samples(fp, s3d, n); free(s3d); } if(0){ printf("Testing block\n"); FILE *fp = fopen("test_shapes3d_block.pvf", "wb"); fprintf(fp, "PVF(1)\n"); fprintf(fp, "bs = %g\n", 1./n); s3d = (geom_shape3d*)malloc(sizeof(geom_shape3d)); s3d->type = GEOM_SHAPE3D_BLOCK; geom_randd(3, s3d->org); s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; geom_randd(9, s3d->s.block.A); for(i = 0; i < 9; ++i){ s3d->s.block.B[i] = s3d->s.block.A[i]; } geom_matinv3d(s3d->s.block.B); geom_shape3d_get_aabb(s3d, &b3d1); draw_aabb3(fp, &b3d1); draw_samples(fp, s3d, n); free(s3d); } if(0){ printf("Testing frustum\n"); FILE *fp = fopen("test_shapes3d_frustum.pvf", "wb"); fprintf(fp, "PVF(1)\n"); fprintf(fp, "bs = %g\n", 1./n); s3d = (geom_shape3d*)malloc(sizeof(geom_shape3d)); s3d->type = GEOM_SHAPE3D_FRUSTUM; geom_randd(3, s3d->org); //s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; geom_randd(3, s3d->s.frustum.Q); geom_normalize3d(s3d->s.frustum.Q); geom_maketriad3d(&s3d->s.frustum.Q[0], &s3d->s.frustum.Q[3], &s3d->s.frustum.Q[6]); geom_randd(1, &s3d->s.frustum.len); geom_randd(1, &s3d->s.frustum.r_base); geom_randd(1, &s3d->s.frustum.r_tip); s3d->s.frustum.len = 0.5+fabs(s3d->s.frustum.len); s3d->s.frustum.r_base = 0.5+fabs(s3d->s.frustum.r_base); s3d->s.frustum.r_tip = 0.5+fabs(s3d->s.frustum.r_tip); /* s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; s3d->s.frustum.Q[0] = 1; s3d->s.frustum.Q[1] = 0; s3d->s.frustum.Q[2] = 0; s3d->s.frustum.Q[3] = 0; s3d->s.frustum.Q[4] = 1; s3d->s.frustum.Q[5] = 0; s3d->s.frustum.Q[6] = 0; s3d->s.frustum.Q[7] = 0; s3d->s.frustum.Q[8] = 1; s3d->s.frustum.len = 1; s3d->s.frustum.r_base = 1; s3d->s.frustum.r_tip = 0.5; */ geom_shape3d_get_aabb(s3d, &b3d1); draw_aabb3(fp, &b3d1); draw_samples(fp, s3d, n); free(s3d); } if(0){ printf("Testing polyhedron\n"); m = 11; FILE *fp = fopen("test_shapes3d_poly.pvf", "wb"); fprintf(fp, "PVF(1)\n"); fprintf(fp, "bs = %g\n", 1./n); s3d = (geom_shape3d*)malloc(sizeof(geom_shape3d) + sizeof(double) * 4*(m-1)); s3d->type = GEOM_SHAPE3D_POLY; //geom_randd(3, s3d->org); s3d->org[0] = 0; s3d->org[1] = 0; s3d->org[2] = 0; s3d->s.poly.np = m; geom_randd(4*m, s3d->s.poly.p); for(i = 0; i < m; ++i){ geom_normalize3d(&s3d->s.poly.p[4*i+0]); s3d->s.poly.p[4*i+3] = fabs(s3d->s.poly.p[4*i+3]); } geom_shape3d_get_aabb(s3d, &b3d1); draw_aabb3(fp, &b3d1); draw_samples(fp, s3d, n); free(s3d); } return 0; }
int main(){ int i,count=0; cairo_surface_t *cs = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, W,H); int s=(W+SPACING-1)/SPACING+1; float *data = calloc((W+SPACING-1)/SPACING,sizeof(*data)); for(i=0;i<s;i++) data[i] = -sin((i-.35)/s*2*M_PI)*.9; clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_samples(cs,data,0); write_frame(cs,"quant",count++); /* fade in lines */ for(i=0;i<FRAMES;i++){ clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_targets(cs,data,(float)i/FRAMES); draw_samples(cs,data,0); write_frame(cs,"quant",count++); } /* fade in arrows */ for(i=0;i<FRAMES;i++){ clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_targets(cs,data,1); draw_samples(cs,data,0); draw_arrows(cs,data,0,(float)i/FRAMES); write_frame(cs,"quant",count++); } /* move */ for(i=0;i<FRAMES;i++){ clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_targets(cs,data,1); draw_samples(cs,data,(float)i/FRAMES); draw_arrows(cs,data,(float)i/FRAMES,1); write_frame(cs,"quant",count++); } /* fade out all */ for(i=0;i<FRAMES;i++){ clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_targets(cs,data,1.-(float)i/FRAMES); draw_samples(cs,data,1); draw_arrows(cs,data,1,1-(float)i/FRAMES); write_frame(cs,"quant",count++); } clear_surface(cs); draw_quant(cs); draw_axis(cs,0); draw_samples(cs,data,1); write_frame(cs,"quant",count++); cairo_surface_destroy(cs); return 0; }