예제 #1
0
/// 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;
}
예제 #2
0
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;
}
예제 #3
0
파일: curtains.cpp 프로젝트: JunC74/PYX
	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;
	}
예제 #4
0
파일: curtains.cpp 프로젝트: JunC74/PYX
	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");
	}
예제 #5
0
파일: curtains.cpp 프로젝트: JunC74/PYX
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);

}
예제 #6
0
파일: curtains.cpp 프로젝트: JunC74/PYX
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);

}