⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 display.c

📁 细胞自动机的一个源代码
💻 C
字号:
//#include <GL/glut.h>#include "main.h"static int f=0, l=0;static float flerp=0.0;static int fps=0, ifps=0;static int fram=0;float crap=0.0;int bang=0;void dyn_displayfunc(void) {  float ff, tx, ty, tz;  int nf;  int low=8, high=19;  static int init=0;  int i, j, k, a=1;  trixd *viewp=NULL, *tem=NULL;  float gx, gy, gz;  vec3d cov, p0, p1, poff, tbill;  vec3d tp0, tp1, tp2;  int las;  float billfac=8.0, pickfac=2.0;  float texcolor[] = { 0.0, 1.0, 0.0, 0.0};  int c;  int p[3] = {0, 0, 0};  float ts[3] = {0.0, 0.0, 0.0};  int tt;  float b[3] = {0.0, 0.0, 0.0};  if (!viewp) {    viewp = makedyntrixd(4, 4);    tem = makedyntrixd(4, 4);  }  for (i=0; i<4; i++) {    for (j=0; j<4; j++) {      viewp->d[i][j] = ((i==j)?1.0:0.0);    }  }  for (i=0; i<4; i++) {    viewp->d[3][i]=1.0;  }  ff = (float)l/20000.0;  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glLoadIdentity();  /* our camera rotation */  glTranslatef(0.0, 0.0, worl.zoom);  glRotatef(worl.curwang, 0.0, 1.0, 0.0);  glRotatef(worl.curzang, 1.0, 0.0, 0.0);  glTranslatef(-worl.com.x, -worl.com.y, 0.0);  //printf("com(%f %f) %f\n", worl.com.x, worl.com.y, worl.zoom);  /* get our center of vision */  /* rotating objects equivalent to inverse rotating     camera */  trixtransd(viewp, tem, 0.0, 0.0, -worl.zoom);  trixrottd(tem, viewp, -worl.curwang, 0.0, 1.0, 0.0);  trixrottd(viewp, tem, -worl.curzang, 1.0, 0.0, 0.0);  trixtransd(tem, viewp, worl.com.x, worl.com.y, 0.0);  cov.x = viewp->d[0][3];  cov.y = viewp->d[1][3];  cov.z = viewp->d[2][3];  /*  glTranslatef(0.0, 0.0, -10.0); */  c = g_ca->cur;  //printf("\nwb: ");  for (i=0; i<(g_ca->dim + 1); i++) {    ts[i] = g_ca->wb[i];    //printf("%f ", ts[i]);  }  //printf("\n");  //printf("wl: %i\n", g_ca->wlen);  /* slow as fuck, but general, and functional */  //k = (g_ca->cur + g_ca->wlen - 1) % (g_ca->wlen);  k = g_ca->cur;  //printf("cur-1:%i\n", k);  for (tt=0; tt<g_ca->slen; tt++) {    glPushMatrix();    glTranslatef(((float)tt)*ts[0],		 ((float)tt)*ts[1],		 ((float)tt)*ts[2]);    for (i=0; i<(g_ca->fd); i++) {      ca_vec(g_ca, p, i);      if (g_ca->ca[k][ca_point(g_ca, p)]) {	glPushMatrix();	for (j=0; j<(g_ca->dim); j++) {	  glTranslatef(((float)p[j])*(g_ca->b[j][0]),		       ((float)p[j])*(g_ca->b[j][1]),		       ((float)p[j])*(g_ca->b[j][2]));	}      	glColor3f(1.0, 0.0, 0.0);	glutWireCube(0.25);	glPopMatrix();            } else {	//glColor3f(0.0, 1.0, 0.0);	//glutWireCube(1.0);      }    }    glPopMatrix();    k+=g_ca->wlen-1;    k%=g_ca->wlen;  }  glLoadIdentity();  cas_display(g_cas);  glXSwapBuffers(gwin.g_dpy, gwin.g_win);  }void dyn_displayfunc_diff(void) {  float ff, tx, ty, tz;  int nf;  int low=8, high=19;  static int init=0;  int i, j, k, a=1;  trixd *viewp=NULL, *tem=NULL;  float gx, gy, gz;  vec3d cov, p0, p1, poff, tbill;  vec3d tp0, tp1, tp2;  int las;  float billfac=8.0, pickfac=2.0;  float texcolor[] = { 0.0, 1.0, 0.0, 0.0};  int c;  int p[3] = {0, 0, 0};  float ts[3] = {0.0, 0.0, 0.0};  int tt, dk;  if (!viewp) {    viewp = makedyntrixd(4, 4);    tem = makedyntrixd(4, 4);  }  for (i=0; i<4; i++) {    for (j=0; j<4; j++) {      viewp->d[i][j] = ((i==j)?1.0:0.0);    }  }  for (i=0; i<4; i++) {    viewp->d[3][i]=1.0;  }  ff = (float)l/20000.0;  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glLoadIdentity();  /* our camera rotation */  glTranslatef(0.0, 0.0, worl.zoom);  glRotatef(worl.curwang, 0.0, 1.0, 0.0);  glRotatef(worl.curzang, 1.0, 0.0, 0.0);  glTranslatef(-worl.com.x, -worl.com.y, 0.0);  //printf("com(%f %f) %f\n", worl.com.x, worl.com.y, worl.zoom);  /* get our center of vision */  /* rotating objects equivalent to inverse rotating     camera */  trixtransd(viewp, tem, 0.0, 0.0, -worl.zoom);  trixrottd(tem, viewp, -worl.curwang, 0.0, 1.0, 0.0);  trixrottd(viewp, tem, -worl.curzang, 1.0, 0.0, 0.0);  trixtransd(tem, viewp, worl.com.x, worl.com.y, 0.0);  cov.x = viewp->d[0][3];  cov.y = viewp->d[1][3];  cov.z = viewp->d[2][3];  /*  glTranslatef(0.0, 0.0, -10.0); */  c = g_ca->cur;  //printf("\nwb: ");  for (i=0; i<(g_ca->dim + 1); i++) {    ts[i] = g_ca->wb[i];    //printf("%f ", ts[i]);  }  //printf("\n");  //printf("wl: %i\n", g_ca->wlen);  /* slow as fuck, but general, and functional */  //k = (g_ca->cur + g_ca->wlen - 1) % (g_ca->wlen);  k = g_ca->cur;  //printf("cur-1:%i\n", k);  for (tt=0; tt<g_ca->slen; tt++) {    /* translate by time series */    glPushMatrix();    glTranslatef(((float)tt)*ts[0],		 ((float)tt)*ts[1],		 ((float)tt)*ts[2]);    //printf("\n");    dk = (k - g_ca->diff + g_ca->wlen)%g_ca->wlen;    for (i=0; i<(g_ca->fd); i++) {      ca_vec(g_ca, p, i);      //if (abs(g_ca->ca[k][ca_point(g_ca, p)]-g_ca->ca[dk][ca_point(g_ca, p)])>1) {      //printf("%i", abs(g_ca->ca[k][ca_point(g_ca, p)]-g_ca->ca[dk][ca_point(g_ca, p)]));	//}      //printf("%i", abs(g_ca->ca[k][ca_point(g_ca, p)]-g_ca->ca[dk][ca_point(g_ca, p)]));      if ((g_ca->ca[k][ca_point(g_ca, p)]-g_ca->ca[dk][ca_point(g_ca, p)])!=0) {	glPushMatrix();	for (j=0; j<(g_ca->dim); j++) {	  glTranslatef(((float)p[j])*(g_ca->b[j][0]),		       ((float)p[j])*(g_ca->b[j][1]),		       ((float)p[j])*(g_ca->b[j][2]));	}      	glColor3f(1.0, 0.0, 0.0);	glutWireCube(0.25);	glPopMatrix();            } else {	//glColor3f(0.0, 1.0, 0.0);	//glutWireCube(1.0);      }    }    glPopMatrix();    k+=g_ca->wlen-1;    k%=g_ca->wlen;  }  //printf("\n\n");  glLoadIdentity();  cas_display(g_cas);  glXSwapBuffers(gwin.g_dpy, gwin.g_win);  }void updateworld(void) {  int i, j, k;  double axis[3];  float beflen, aftlen, tim;  static trixd *temx=NULL;  vec3d tv0, tv1, tp0, tp1, rax;  static trixd *txp0, *txp1, *temx2, *trans0, *trans1, *finx, *rotloc;  int a=1;  static int ffac=1;  static int count=0;  //count++;  //if (count>60) {  //printf("bang\n");  //gridupdate(globgrid, 200, 0.01);  //count = 0;  //}  if (g_ca->go) {    (*ca_update_func)(g_ca, 0, g_ca->fd-1);  }}void idleworld(struct timeval *tv, struct timeval *tvnow, int delay) {  int i, j;  float f;  f = (float)(tvnow->tv_usec - tv->tv_usec) / (float)delay;    //gridupdate(globgrid, 200, 0.01);}void dyn_idlefunc(void) {  int delay = 33333;  int i, j;  static struct timeval tv, tvnow;  static int fi=0;  if (!fi) {    fi = 1;    gettimeofday(&tv, NULL);    printf("idle init\n");  }  gettimeofday(&tvnow, NULL);  if (tvnow.tv_sec==tv.tv_sec) {    if ( (tvnow.tv_usec > (tv.tv_usec + delay)) ) {      updateworld();      gettimeofday(&tv, NULL);    } else {      idleworld(&tv, &tvnow, delay);    }  } else {    tvnow.tv_usec+=1000000;    if ( (tvnow.tv_usec /*+ 1000000*/) > (tv.tv_usec + delay) ) {      updateworld();      gettimeofday(&tv, NULL);    } else {      idleworld(&tv, &tvnow, delay);    }  }  wlpostredisplay();  }void dyn_displayfunc_dfa(void) {  float ff, tx, ty, tz;  int nf;  int low=8, high=19;  static int init=0;  int i, j, k, a=1;  trixd *viewp=NULL, *tem=NULL;  float gx, gy, gz;  vec3d cov, p0, p1, poff, tbill;  vec3d tp0, tp1, tp2;  int las;  float billfac=8.0, pickfac=2.0;  float texcolor[] = { 0.0, 1.0, 0.0, 0.0};  int c;  int p[3] = {0, 0, 0};  float ts[3] = {0.0, 0.0, 0.0};  int tt;  float b[3] = {0.0, 0.0, 0.0};  if (!viewp) {    viewp = makedyntrixd(4, 4);    tem = makedyntrixd(4, 4);  }  for (i=0; i<4; i++) {    for (j=0; j<4; j++) {      viewp->d[i][j] = ((i==j)?1.0:0.0);    }  }  for (i=0; i<4; i++) {    viewp->d[3][i]=1.0;  }  ff = (float)l/20000.0;  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);  glLoadIdentity();  /* our camera rotation */  glTranslatef(0.0, 0.0, worl.zoom);  glRotatef(worl.curwang, 0.0, 1.0, 0.0);  glRotatef(worl.curzang, 1.0, 0.0, 0.0);  glTranslatef(-worl.com.x, -worl.com.y, 0.0);  //printf("com(%f %f) %f\n", worl.com.x, worl.com.y, worl.zoom);  /* get our center of vision */  /* rotating objects equivalent to inverse rotating     camera */  trixtransd(viewp, tem, 0.0, 0.0, -worl.zoom);  trixrottd(tem, viewp, -worl.curwang, 0.0, 1.0, 0.0);  trixrottd(viewp, tem, -worl.curzang, 1.0, 0.0, 0.0);  trixtransd(tem, viewp, worl.com.x, worl.com.y, 0.0);  cov.x = viewp->d[0][3];  cov.y = viewp->d[1][3];  cov.z = viewp->d[2][3];  /*  glTranslatef(0.0, 0.0, -10.0); */  c = g_ca->cur;  //printf("\nwb: ");  for (i=0; i<(g_ca->dim + 1); i++) {    ts[i] = g_ca->wb[i];    //printf("%f ", ts[i]);  }  //printf("\n");  //printf("wl: %i\n", g_ca->wlen);  /* slow as fuck, but general, and functional */  //k = (g_ca->cur + g_ca->wlen - 1) % (g_ca->wlen);  k = g_ca->cur;  //printf("cur-1:%i\n", k);  for (tt=0; tt<g_ca->slen; tt++) {    glPushMatrix();    glTranslatef(((float)tt)*ts[0],		 ((float)tt)*ts[1],		 ((float)tt)*ts[2]);    for (i=0; i<(g_ca->fd); i++) {      ca_vec(g_ca, p, i);      //if (g_ca->ca[k][ca_point(g_ca, p)]) {      if (g_dc->g[ca_point(g_ca, p)+(k*(g_ca->fd))]>0) {	glPushMatrix();	for (j=0; j<(g_ca->dim); j++) {	  glTranslatef(((float)p[j])*(g_ca->b[j][0]),		       ((float)p[j])*(g_ca->b[j][1]),		       ((float)p[j])*(g_ca->b[j][2]));	}      	glColor3f(1.0, 0.0, 0.0);	glutWireCube(0.25);	glPopMatrix();            } else {	//glColor3f(0.0, 1.0, 0.0);	//glutWireCube(1.0);      }    }    glPopMatrix();    k+=g_ca->wlen-1;    k%=g_ca->wlen;  }  glLoadIdentity();  cas_display(g_cas);  glXSwapBuffers(gwin.g_dpy, gwin.g_win);  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -