예제 #1
0
	void CSeperator_EfficiencyCurve::EvalProducts(MStream &Feed ,
	                         MStream &Product1,
							 MStream &Product2,
							 MStream &Product3,
							 bool    bTwoDecks,
							 bool    bInit)
	
	{ 
    // Get info on Size Distribution
    MIPSD & l_PSD=*Feed.FindIF<MIPSD>();
    if (IsNothing(l_PSD))
      {
      int xx=0;
      return; //Why do we get here!!!
      }
    long    l_SizeCount      = l_PSD.getSizeCount();
    long    l_PSDVectorCount = l_PSD.getPSDVectorCount();


	//
	// Calculate Probability Passing for Each Deck
	// We could calculate this in Build Data definition
	//
    CalculateEfficiencyCurve( l_PSD , m_dTopD50 , m_dTopAlpha, m_dTopBeta, m_dTopC,
							  m_dTopBetaStar,
		                      m_TopEu );
    CalculateEfficiencyCurve( l_PSD , m_dBottomD50 , m_dBottomAlpha, m_dBottomBeta, m_dBottomC,
						      m_dBottomBetaStar,
		                      m_BottomEu );
 

       if ( bTwoDecks )
        {
            // Execute the first seperator
			//MStream l_IntermediateProduct = Product1; // Cannot do this as = operator does not make copy
			Seperate(m_TopEu,m_dTopWaterSplitToUS,
				     Feed,
		             Product1 ,
		             /*l_IntermediateProduct*/Product2);

            // Execute the second seperator
			Seperate(m_BottomEu,m_dBottomWaterSplitToUS,
				     /*l_IntermediateProduct*/Product2,
		             Product2 ,
		             Product3);
  
 
        }
        else
        {
            // Execute the first seperator
			Seperate(m_TopEu,m_dTopWaterSplitToUS,
				     Feed,
		             Product1 ,
		             Product3);

        }
	
	}
예제 #2
0
void DIYPhysicScene::Response(RigidBody * obj1, RigidBody * obj2, float overlap, vec3 normal)
{
	Seperate(obj1, obj2, overlap, normal);

	const float coefficientOfRestitution = 0.5f;

	vec3 relativeVel = obj2->m_linearVelocity - obj1->m_linearVelocity;
	float velocityAlongNormal = glm::dot(relativeVel, normal);
	float impulseAmount = -(1 - coefficientOfRestitution) * velocityAlongNormal;
	impulseAmount /= 1 / obj1->m_mass + 1 / obj2->m_mass;

	float combinedElasticity = (obj1->m_elasticity + obj2->m_elasticity) / 2.0f;
	vec3 impulse = impulseAmount * normal;

	// Apply change in momentum
	obj1->AddVelocity(1 / obj1->m_mass * -impulse);
	obj2->AddVelocity(1 / obj2->m_mass * impulse);
}