/// put into RESULT all the data expressions from the NODE label const KnowledgeExplorer::TCGItemVec& KnowledgeExplorer :: getLabel ( const TCGNode* node, bool onlyDet ) { // prepare D2I translator D2I.ensureDagSize(); DlCompletionTree::const_label_iterator p, p_end; bool data = node->isDataNode(); Concepts.clear(); for ( p = node->beginl_sc(), p_end = node->endl_sc(); p != p_end; ++p ) if ( !onlyDet || p->getDep().empty() ) addC(D2I.getExpr(p->bp(),data)); for ( p = node->beginl_cc(), p_end = node->endl_cc(); p != p_end; ++p ) if ( !onlyDet || p->getDep().empty() ) addC(D2I.getExpr(p->bp(),data)); return Concepts; }
int main() { FILE *in,*out; int k,w,i; in=fopen("digital.in","r"); out=fopen("digital.out","w+"); fscanf(in,"%d%d",&k,&w); for (i=0;i<512;i++) { f[i][0][0]=1;f[i][0][31]=-1; f[i][i][0]=1;f[i][i][31]=-1; f[i][1][0]=i;f[i][1][31]=-1; f[i][i-1][0]=i;f[i][i-1][31]=-1; } for (i=w/k;i>=2;i--) addC((1<<k)-1,i); for (i=(1<<(w%k))-1;i;i--) addC((1<<k)-i-1,w/k); for (i=30;i>0 && (!ans[i]);i--); fprintf(out,"%d",ans[i]); for (i--;i>=0;i--) fprintf(out,"%09d",ans[i]); fclose(in); fclose(out); return 0; }
bool Curtains::Init(int w,int h,float edge, float k,float damp,const char* file_name) { index=0; index2=0; gravity[0] = 0.0; gravity[1] = -0.2; gravity[2] = 0.0; gravity[3] =1.0; // 重力 width = w; height = h; this->edge =edge; this->k=k; this->damp = damp; particle = new PARTICLE*[height]; ff = new PARTICLE*[height]; for(int i=0;i<height;i++) { particle[i] = new PARTICLE[width]; ff[i] = new PARTICLE[width]; } for (int i = 0;i<height;i++) { for(int j = 0;j<width;j++) { particle[i][j].position.x = (j - w / 2) * edge; particle[i][j].position.y = -(i - h / 2) * edge; particle[i][j].position.z = 0; particle[i][j].fixed = 0; particle[i][j].fixedY = 0; } } for(int j = 0; j < width; j+=3) particle[0][j].fixed = 1; for(int j = 0; j < width; j++) particle[0][j].fixedY = 1; Num = width*height*6; // position = NULL; // normal = NULL; // tex = NULL; // // position = new vec3[Num]; // normal = new vec3[Num]; // tex = new vec2[Num]; vectex_array = new VertexFormat_XYZ_NORMAL_TEX[Num]; GLfloat iterationW = width/damp; GLfloat iterationH = height/damp; GLfloat fTexCoordStepW = 1.0/(width-1);//50/(GLfloat)iterationW; GLfloat fTexCoordStepH = 1.0/(height-1);//50/(GLfloat)iterationH; //int index = 0; GLfloat s = 0; GLfloat t = 0; for(int i = 0;i<height-1;i++,t+=fTexCoordStepH) for(int j = 0;j<width-1;j++,s+=fTexCoordStepW) { addC(particle[i][j].position,particle[i+1][j].position,particle[i+1][j+1].position,particle[i][j+1].position); // tex[index2++] = vec2(s,t); // tex[index2++] = vec2(s,t+fTexCoordStepH); // tex[index2++] = vec2(s+fTexCoordStepW,t+fTexCoordStepH); // tex[index2++] = vec2(s+fTexCoordStepW,t+fTexCoordStepH); // tex[index2++] = vec2(s+fTexCoordStepW,t); // tex[index2++] = vec2(s,t); vectex_array[index2++].tex_coord = vec2(s,t); vectex_array[index2++].tex_coord = vec2(s,t+fTexCoordStepH); vectex_array[index2++].tex_coord = vec2(s+fTexCoordStepW,t+fTexCoordStepH); vectex_array[index2++].tex_coord = vec2(s+fTexCoordStepW,t+fTexCoordStepH); vectex_array[index2++].tex_coord = vec2(s+fTexCoordStepW,t); vectex_array[index2++].tex_coord = vec2(s,t); } for(int i = 0;i<Num;i++) //normal[i] = vec3(0.0,0.0,1.0); vectex_array[i].normal = vec3(0.0,0.0,1.0); geomety_model_ = Model::Create(); SAFRetain(geomety_model_); geomety_model_->SetTexture(TextureLoader::GetInstance()->LoadTexture2D(file_name)); geomety_model_->SetVertexData(vectex_array,Num*sizeof(VertexFormat_XYZ_NORMAL_TEX),Num); geomety_model_->SetVertexFomat(FVF_XYZ_NORMAL_TEX); return true; }
void Curtains::Update(float dt) { vec3 Li; for (int i =0;i<height;i++) { for(int j = 0;j<width;j++) { ff[i][j] = particle[i][j]; } } for (int i =0;i<height;i++) { for(int j = 0;j<width;j++) { if(particle[i][j].fixed) { continue; } memset(&Li, 0, sizeof(vec3)); if (i > 0) { GetForce(&ff[i][j], &ff[i - 1][j], &Li); } if (i < height - 1) { GetForce(&ff[i][j], &ff[i + 1][j], &Li); } particle[i][j].velocity.x += Li.x; if(!particle[i][j].fixedY) particle[i][j].velocity.y += Li.y; particle[i][j].velocity.z += Li.z; // 计算左右相邻点的作用力 memset(&Li, 0, sizeof(vec3)); if (j > 0) { GetForce(&ff[i][j], &ff[i][j - 1], &Li); } if (j < width - 1) { GetForce(&ff[i][j], &ff[i][j + 1], &Li); } // 默认质量为1,外力的加速度数值上等于外力 // 速度改变 particle[i][j].velocity.x += Li.x + gravity[0]; if(!particle[i][j].fixedY) particle[i][j].velocity.y += Li.y + gravity[1]; particle[i][j].velocity.z += Li.z + gravity[2]; // 坐标改变 particle[i][j].position.x += particle[i][j].velocity.x; if(!particle[i][j].fixedY) particle[i][j].position.y+= particle[i][j].velocity.y; particle[i][j].position.z += particle[i][j].velocity.z; } } index = 0; for(int i = 0;i<height-1;i++) for(int j = 0;j<width-1;j++) { addC(particle[i][j].position,particle[i+1][j].position,particle[i+1][j+1].position,particle[i][j+1].position); } geomety_model_->SetVertexData(vectex_array,Num*sizeof(VertexFormat_XYZ_NORMAL_TEX),Num); geomety_model_->SetVertexFomat(FVF_XYZ_NORMAL_TEX); //Log::GetInstance()->Debug("aaaaaaaa"); }
void curtains::UpdateParticle() { vec3 Li; for (int i =0;i<height;i++) { for(int j = 0;j<width;j++) { ff[i][j] = particle[i][j]; } } for (int i =0;i<height;i++) { for(int j = 0;j<width;j++) { if(particle[i][j].fixed) { continue; } memset(&Li, 0, sizeof(vec3)); if (i > 0) { GetForce(&ff[i][j], &ff[i - 1][j], &Li); } if (i < height - 1) { GetForce(&ff[i][j], &ff[i + 1][j], &Li); } particle[i][j].velocity.x += Li.x; if(!particle[i][j].fixedY) particle[i][j].velocity.y += Li.y; particle[i][j].velocity.z += Li.z; // 计算左右相邻点的作用力 memset(&Li, 0, sizeof(vec3)); if (j > 0) { GetForce(&ff[i][j], &ff[i][j - 1], &Li); } if (j < width - 1) { GetForce(&ff[i][j], &ff[i][j + 1], &Li); } // 默认质量为1,外力的加速度数值上等于外力 // 速度改变 particle[i][j].velocity.x += Li.x + gravity[0]; if(!particle[i][j].fixedY) particle[i][j].velocity.y += Li.y + gravity[1]; particle[i][j].velocity.z += Li.z + gravity[2]; // 坐标改变 particle[i][j].position.x += particle[i][j].velocity.x; if(!particle[i][j].fixedY) particle[i][j].position.y+= particle[i][j].velocity.y; particle[i][j].position.z += particle[i][j].velocity.z; } } index = 0; for(int i = 0;i<height-1;i++) for(int j = 0;j<width-1;j++) { addC(particle[i][j].position,particle[i+1][j].position,particle[i+1][j+1].position,particle[i][j+1].position); } // glutPostRedisplay(); 重绘窗口 Sleep(10); }
curtains::curtains(int w,int h,float edge, float k,float damp){ width = w; height = h; this->edge =edge; this->k=k; this->damp = damp; particle = new PARTICLE*[height]; ff = new PARTICLE*[height]; for(int i=0;i<height;i++) { particle[i] = new PARTICLE[width]; ff[i] = new PARTICLE[width]; } for (int i = 0;i<height;i++) { for(int j = 0;j<width;j++) { particle[i][j].position.x = (j - w / 2) * edge; particle[i][j].position.y = -(i - h / 2) * edge; particle[i][j].position.z = 0; particle[i][j].fixed = 0; particle[i][j].fixedY = 0; } } for(int j = 0; j < width; j+=3) particle[0][j].fixed = 1; for(int j = 0; j < width; j++) particle[0][j].fixedY = 1; Num = width*height*6; position = NULL; normal = NULL; tex = NULL; position = new vec3[Num]; normal = new vec3[Num]; tex = new vec2[Num]; GLfloat iterationW = width/damp; GLfloat iterationH = height/damp; GLfloat fTexCoordStepW = 0.1;//50/(GLfloat)iterationW; GLfloat fTexCoordStepH = 0.1;//50/(GLfloat)iterationH; int index = 0; GLfloat s = 0; GLfloat t = 0; for(int i = 0;i<height-1;i++,t+=fTexCoordStepH) for(int j = 0;j<width-1;j++,s+=fTexCoordStepW) { addC(particle[i][j].position,particle[i+1][j].position,particle[i+1][j+1].position,particle[i][j+1].position); tex[index2++] = vec2(s,t); tex[index2++] = vec2(s,t+fTexCoordStepH); tex[index2++] = vec2(s+fTexCoordStepW,t+fTexCoordStepH); tex[index2++] = vec2(s+fTexCoordStepW,t+fTexCoordStepH); tex[index2++] = vec2(s+fTexCoordStepW,t); tex[index2++] = vec2(s,t); } for(int i = 0;i<Num;i++) normal[i] = vec3(0.0,0.0,1.0); }