コード例 #1
0
ファイル: BasicSPH.cpp プロジェクト: rpearl/BasicSPH
//--------------------------------------------------------------------------------------------------
// computeDensityAndPressure
void BasicSPH::computeDensityAndPressure()
{
    // Precompute Taits coefficient
    const double B = (_k * _restDensity) / 7.0;

    // Iterate particles
    for (long p=0; p<_particles.size(); ++p)
    {
        SPHParticle &particle = _particles[p];

        // Reinitialize particle properties
        particle.density = 0.0;
        particle.oneOverDensity = 0.0;
        particle.accel = Vec3d(0,0,0);
        particle.pressure = 0.0;
        particle.oneOverDensity = 0.0;

        // Add current particle's contribution
        particle.density = _mass * getKernelValue(0.0);

        // Compute density from neighbors contributions
        // rho_i = SUM_j (m_j * Wij)
        for (long n=0; n<_neighbors[p].size(); ++n)
        {
            const Neighbor &neighbor = _neighbors[p][n];

            // Add contribution
            particle.density += _mass * getKernelValue(neighbor.dist);
        }

        // Precompute 1/rho and compute pressure using Tait's equation:
        // p_i = B * ((rho/rho_rest)^7-1)
        if (particle.density != 0.0)
        {
            particle.oneOverDensity = 1.0/particle.density;
            particle.pressure = B * (pow7(particle.density/_restDensity) - 1.0);
        }
    }
}
コード例 #2
0
ファイル: result.cpp プロジェクト: faizilham/grafika-tubes1
void Result::showResultWin(int score){

	int left = -320;
	int right = 320;
	int top = 240;
	int bot = -240;
	char strbuffer[64];
	// W
	Point pow1(left+60,top-80);
	Point pow2(left+140+5,bot+220);
	Point pow3(left+180+5,bot+300);
	Point pow4(left+220+5,bot+220);
	Point pow5(left+300+10,top-80);
	Point pow6(left+260+5,top-80);
	Point pow7(left+220+5,top-160);
	Point pow8(left+180+5,top-80);
	Point pow9(left+140+5,top-160);
	Point pow10(left+100+5,top-80);
	Point powc((pow1.x+pow5.x)/2,(pow1.y+pow2.y)/2);
	vector<Point> pow;
	pow.push_back(pow1);
	pow.push_back(pow2);
	pow.push_back(pow3);
	pow.push_back(pow4);
	pow.push_back(pow5);
	pow.push_back(pow6);
	pow.push_back(pow7);
	pow.push_back(pow8);
	pow.push_back(pow9);
	pow.push_back(pow10);
	if (firsttime){
		pol_w.setCorner(pow);
		pol_w.setCenter(powc);
		Transform scale = createScale(0.1, 0.1);
		pol_w.applyTransform(scale);
	}

	// I
	Point poi1(left+340,top-80);
	Point poi2(left+340,bot+220);
	Point poi3(left+390,bot+220);
	Point poi4(left+390,top-80);
	Point poic((poi1.x+poi3.x)/2,(poi1.y+poi3.y)/2);
	vector<Point> poi;
	poi.push_back(poi1);
	poi.push_back(poi2);
	poi.push_back(poi3);
	poi.push_back(poi4);
	if (firsttime){
		pol_i.setCorner(poi);
		pol_i.setCenter(poic);
		Transform scale = createScale(0.1, 0.1);
		pol_i.applyTransform(scale);
	}

	// N
	Point pon1(left+420,top-80);
	Point pon2(left+420,bot+220);
	Point pon3(left+470,bot+220);
	Point pon4(left+470,top-170);
	Point pon5(left+530,bot+220);
	Point pon6(left+580,bot+220);
	Point pon7(left+580,top-80);
	Point pon8(left+530,top-80);
	Point pon9(left+530,bot+310);
	Point pon10(left+470,top-80);
	Point ponc((pon1.x+pon6.x)/2,(pon1.y+pon6.y)/2);
	vector<Point> pon;
	pon.push_back(pon1);
	pon.push_back(pon2);
	pon.push_back(pon3);
	pon.push_back(pon4);
	pon.push_back(pon5);
	pon.push_back(pon6);
	pon.push_back(pon7);
	pon.push_back(pon8);
	pon.push_back(pon9);
	pon.push_back(pon10);
	if (firsttime){
		pol_n.setCorner(pon);
		pol_n.setCenter(ponc);
		Transform scale = createScale(0.1, 0.1);
		pol_n.applyTransform(scale);
	}


	// Other
	Point pot1(left+60, top-40);
	Point pot2(right-60, top-40);
	Point pot3(right-60, top-60);
	Point pot4(left+60, top-60);
	Point potc((pot1.x+pot2.x)/2,(pot2.x+pot3.x)/2);
	vector<Point> pot;
	pot.push_back(pot1);
	pot.push_back(pot2);
	pot.push_back(pot3);
	pot.push_back(pot4);
	if (firsttime){
		pol_pot1.setCorner(pot);
		pol_pot1.setCenter(potc);
		Transform scale = createScale(0.1, 0.1);
		pol_pot1.applyTransform(scale);
	}
	

	pot1.set(left+60, bot+180);
	pot2.set(right-60, bot+180);
	pot3.set(right-60, bot+200);
	pot4.set(left+60, bot+200);
	potc.set((pot1.x+pot2.x)/2,(pot2.x+pot3.x)/2);
	pot.clear();
	pot.push_back(pot1);
	pot.push_back(pot2);
	pot.push_back(pot3);
	pot.push_back(pot4);
	if (firsttime){
		pol_pot2.setCorner(pot);
		pol_pot2.setCenter(potc);
		Transform scale = createScale(0.1, 0.1);
		pol_pot2.applyTransform(scale);
	}
	

	resultframe++;
	if (resultframe >= 25)
		resultframe = 25;
	else {
		Transform scale = createScale(1.1, 1.1);
		pol_pot1.applyTransform(scale);
		pol_pot2.applyTransform(scale);
		pol_w.applyTransform(scale);
		pol_i.applyTransform(scale);
		pol_n.applyTransform(scale);
	}
	pol_w.draw(WHITE);
	fill_polygon(pol_w[0].x, pol_w[3].y, pol_w[4].x, pol_w[0].y,WHITE,WHITE);
	pol_i.draw(WHITE);
	fill_polygon(pol_i[0].x, pol_i[2].y, pol_i[2].x, pol_i[0].y,WHITE,WHITE);
	pol_n.draw(WHITE);
	fill_polygon(pol_n[0].x, pol_n[5].y, pol_n[5].x, pol_n[0].y,WHITE,WHITE);
	pol_pot1.draw(WHITE);
	pol_pot2.draw(WHITE);

	settextstyle(7,0,40);
	setcolor(WHITE);
	sprintf(strbuffer,"%d",score);
	outtextxy(getmaxx()/2-50, getmaxy()/2+100, strbuffer);
	firsttime = false;
}