Esempio n. 1
0
void Prism::calculateCenter()
{
	double V1 =	tetrahedronVolume(vertex[0], vertex[1], vertex[2], vertex[3]);
	V3d c1 =	tetrahedronCenter(vertex[0], vertex[1], vertex[2], vertex[3]);

	double V2 =	tetrahedronVolume(vertex[1], vertex[3], vertex[4], vertex[5]);
	V3d c2 =	tetrahedronCenter(vertex[1], vertex[3], vertex[4], vertex[5]);

	double V3 =	tetrahedronVolume(vertex[1], vertex[2], vertex[3], vertex[5]);
	V3d c3 =	tetrahedronCenter(vertex[1], vertex[2], vertex[3], vertex[5]);

	center = (c1 * V1 + c2 * V2 + c3 * V3) / (V1 + V2 + V3);
}
Esempio n. 2
0
float DirectionHistogram::totalVolume() const {
    float volume = 0.0f;
    for (int i = 0; i < m_meshIndex.size(); i += 4) {
        const int i0 = m_meshIndex[i];
        const int i1 = m_meshIndex[i + 1];
        const int i2 = m_meshIndex[i + 2];
        const int i3 = m_meshIndex[i + 3];

        const Vector3& v0 = m_meshVertex[i0] * m_bucket[i0] * m_invArea[i0];
        const Vector3& v1 = m_meshVertex[i1] * m_bucket[i1] * m_invArea[i1];
        const Vector3& v2 = m_meshVertex[i2] * m_bucket[i2] * m_invArea[i2];
        const Vector3& v3 = m_meshVertex[i3] * m_bucket[i3] * m_invArea[i3];

        volume += tetrahedronVolume(v0, v1, v2);
        volume += tetrahedronVolume(v0, v2, v3);
    }
    return volume;
}
Esempio n. 3
0
void TetrahedronSystem::calculateMass()
{
	const unsigned np = numPoints();
	const unsigned nt = numTetrahedrons();
	const float density = totalMass() / totalInitialVolume();
    const float base = 1.f/(float)np;
    unsigned i;
    float * mass = hostMass();
    for(i=0; i< np; i++) {
		if(isAnchoredPoint(i))
			mass[i] = 1e9f;
        else
			mass[i] = base;
    }
    
    Vector3F * p = (Vector3F *)hostXi();
    
    Vector3F v[4];
    unsigned a, b, c, d;
    unsigned *ind = hostTetrahedronIndices();
    float m;
    for(i=0; i<nt; i++) {
		a = ind[0];
		b = ind[1];
		c = ind[2];
		d = ind[3];
		
		v[0] = p[a];
		v[1] = p[b];
		v[2] = p[c];
		v[3] = p[d];
		
		m = density * tetrahedronVolume(v) * .25f;
		
		mass[a] += m;
		mass[b] += m;
		mass[c] += m;
		mass[d] += m;
		
		ind += 4;
	}
	/*
	for(i=0; i< m_numPoints; i++) {
	    std::cout<<" m "<<mass[i];
    }
    */
}
Esempio n. 4
0
float ATetrahedronMesh::calculateVolume() const
{
    Vector3F * p = points();
	unsigned * v = indices();
    
    const unsigned n = numTetrahedrons();
    float sum = 0.f;
    Vector3F q[4];
    unsigned i = 0;
    for(;i<n;i++) {
        q[0] = p[v[0]];
		q[1] = p[v[1]];
		q[2] = p[v[2]];
		q[3] = p[v[3]];
        sum+=tetrahedronVolume(q);
        v+=4;
    }
    
    return sum;
}
Esempio n. 5
0
float TetrahedronSystem::totalInitialVolume()
{
	const unsigned n = numTetrahedrons();
	Vector3F * p = (Vector3F *)hostXi();
    unsigned * v = hostTetrahedronIndices();
    unsigned i;
	Vector3F t[4];
	unsigned a, b, c, d;
	float sum = 0.f;
	for(i=0; i<n; i++) {
		a = v[0];
		b = v[1];
		c = v[2];
		d = v[3];
		t[0] = p[a];
		t[1] = p[b];
		t[2] = p[c];
		t[3] = p[d];
		sum += tetrahedronVolume(t);
        v+= 4;
	}
	return sum;
}
Esempio n. 6
0
void Tetrahedron::calculateVolume()
{
	V = tetrahedronVolume(vertex[0], vertex[1], vertex[2], vertex[3]);
}
Esempio n. 7
0
void Prism::calculateVolume()
{
	V = tetrahedronVolume(vertex[0], vertex[1], vertex[2], vertex[3]) + 
		tetrahedronVolume(vertex[1], vertex[3], vertex[4], vertex[5]) + 
		tetrahedronVolume(vertex[1], vertex[2], vertex[3], vertex[5]);
}