代码不全吧,不过看起来来这段代码像是用来绘制模拟播放器里面波形,或者贪吃蛇那样的代码 :) 1. 没有看到 trail 参与了绘制。不过关于trail,你可简化成这个,就是每次执行show函数的时候,trail 数组的值都会向前挪一位,比如原来数组是{1,2,3,4,5},执行一次过后,就是{1,1,2,3,4}, then {1,1,1,2,3}, etc... void show() { for ( i=0; i<=number; i++="" )="" {="" if="" (i="=" 0)="" {="" if="" (npoints="">=number;>< trailsize)="" npoints++;="" for="" (j="TRAILSIZE-1;" j="">0; j--) for (k=0; k<3; k++)="" {="" trail[j][k]="trail[j-1][k];" }="" }="" }="" }="" 2.里面还有若干变量,不知道哪里来,也不知做什么用。="" 下面我解释下代码,="" #define="" trailsize="" 50="" #define="" number="" 20000="" 粒子数目="" void="" show(void)="" {="" int="" npoints="0;" point3="" trail[trailsize]="" int="" i,="" j,="" k;="" glpointsize(0.6);="" glcolor4f(1.0,0.3,0.2,1.0);="" glbegin(gl_points);="" 具体解释下这以下的几个循环="" for="" (="" i="0;">3;><=number; i++="" )="" {="" glvertex3fv(mols[i]);="" 参与绘制的也就是这一句,以此画number="" 个点,颜色是,(1,0.3,0.2,1),="" if="" (i="=" 0)="" 也就是每执行一次show,就要改变一下trait数组,="" {="" if="" (npoints="">=number;>< trailsize)="" npoints++;="" for="" (j="TRAILSIZE-1;" j="">0; j--) for (k=0; k<3; k++)//这种循环表示遍历点的x,y,z坐标="" {="" trail[j][k]="trail[j-1][k];" }="" }="" }="" glend();="" }="" 另外一段://这段是生成mols点,不知道是基于什么函数,我尝试解释一下="" int="" bounce;="" void="" animate(void)="" {="" int="" i,j,sign;="" bounce="0;" for(i="0;">3;>
<3; j++)="" {="" sign="-1+2*(rand()%2);//" 符号随机产生,rand()是白噪声(就是一般的噪声,你可以查一下这个白噪声这个术语,这样有利于你理解这段代码),这里正负号的概率是五五开="" mols[i][j]="" -="(float)sign*distance*((float)(rand()%GRAN)/(float)(GRAN));" (rand()%gran/(float)(gran))随机产生[0,1]之间的浮点数,那整个函数的意思就是,产生[-distance,distance]之间的随机浮点数。这种写法有点怪。。。="" 下面的代码确保产生的数介于[-bound,bound]之间,但是逻辑好像写错了,漏了个else..="" if="" (mols[i][j]=""> bound) {mols[i][j] = 2.0*bound - mols[i][j]; bounce++;} if (mols[i][j] <-bound) {mols[i][j]="2.0*(-bound)" -="" mols[i][j];="" bounce++;}="" }="" }="" 绘制="" glutpostredisplay();="" }="">-bound)>3;>
代码不全吧,不过看起来来这段代码像是用来绘制模拟播放器里面波形,或者贪吃蛇那样的代码 :)
1. 没有看到 trail 参与了绘制。不过关于trail,你可简化成这个,就是每次执行show函数的时候,trail 数组的值都会向前挪一位,比如原来数组是{1,2,3,4,5},执行一次过后,就是{1,1,2,3,4}, then {1,1,1,2,3}, etc...
void show()
{
for ( i=0; i<=number; i++ )
{
if (i == 0)
{
if (npoints < trailsize) npoints++;
for (j=trailsize-1; j>0; j--)
for (k=0; k<3; k++)
{
trail[j][k]=trail[j-1][k];
}
}
}
}
2.里面还有若干变量,不知道哪里来,也不知做什么用。
下面我解释下代码,
#define trailsize 50
#define number 20000 // 粒子数目
void show(void)
{
int npoints = 0;
point3 trail[trailsize]
int i, j, k;
glpointsize(0.6);
glcolor4f(1.0,0.3,0.2,1.0);
glbegin(gl_points); 具体解释下这以下的几个循环
for ( i=0; i<=number; i++ )
{
glvertex3fv(mols[i]); //参与绘制的也就是这一句,以此画number 个点,颜色是,(1,0.3,0.2,1),
if (i == 0) //也就是每执行一次show,就要改变一下trait数组,
{
if (npoints < trailsize) npoints++;
for (j=trailsize-1; j>0; j--)
for (k=0; k<3; k++)//这种循环表示遍历点的x,y,z坐标
{
trail[j][k]=trail[j-1][k];
}
}
}
glend();
}
另外一段://这段是生成mols点,不知道是基于什么函数,我尝试解释一下
int bounce;
void animate(void)
{
int i,j,sign;
bounce = 0;
for(i=0; i<number; i++) {
for (j=0; j<3; j++) {
sign = -1+2*(rand()%2);// 符号随机产生,rand()是白噪声(就是一般的噪声,你可以查一下这个白噪声这个术语,这样有利于你理解这段代码),这里正负号的概率是五五开
mols[i][j] -= (float)sign*distance*((float)(rand()%gran)/(float)(gran)); // (rand()%gran/(float)(gran))随机产生[0,1]之间的浮点数,那整个函数的意思就是,产生[-distance,distance]之间的随机浮点数。这种写法有点怪。。。
// 下面的代码确保产生的数介于[-bound,bound]之间,但是逻辑好像写错了,漏了个else..
if (mols[i][j] > bound)
{mols[i][j] = 2.0*bound - mols[i][j]; bounce++;}
if (mols[i][j] <-bound)
{mols[i][j] = 2.0*(-bound) - mols[i][j]; bounce++;}
}
}
//绘制
glutpostredisplay();
}
动画的话,说白了就是不断修改mols的值,然后绘制,但是说白了,对于上面的代码,我不知道会画出什么。