本文整理汇总了C++中Box2D::Contains方法的典型用法代码示例。如果您正苦于以下问题:C++ Box2D::Contains方法的具体用法?C++ Box2D::Contains怎么用?C++ Box2D::Contains使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Box2D
的用法示例。
在下文中一共展示了Box2D::Contains方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Max
bool Segment2D::Intersects( const Box2D& Box, CollisionInfo2D* const pInfo /*= NULL*/ ) const
{
if( Box.Contains( m_Start ) )
{
if( pInfo )
{
pInfo->m_Collision = true;
pInfo->m_EHitNormal = CollisionInfo2D::EHN_None;
pInfo->m_HitNormal = Vector2();
pInfo->m_HitT = 0.0f;
pInfo->m_Intersection = m_Start;
}
return true;
}
float MinT = 0.0f;
float MaxT = FLT_MAX;
CollisionInfo2D::EHitNormal EnumHitNormal = CollisionInfo2D::EHN_None;
Vector2 HitNormal;
Vector2 Offset = m_End - m_Start;
if( Abs( Offset.x ) < SMALLER_EPSILON )
{
if( m_Start.x < Box.m_Min.x || m_Start.x > Box.m_Max.x )
{
return false;
}
}
else
{
float InvOffsetX = 1.0f / Offset.x;
float T1 = ( Box.m_Min.x - m_Start.x ) * InvOffsetX;
float T2 = ( Box.m_Max.x - m_Start.x ) * InvOffsetX;
if( T1 > T2 )
{
Swap( T1, T2 );
}
MinT = Max( MinT, T1 );
MaxT = Min( MaxT, T2 );
if( MinT > MaxT )
{
return false;
}
if( MinT == T1 )
{
EnumHitNormal = ( Offset.x > 0.0f ) ? CollisionInfo2D::EHN_Left : CollisionInfo2D::EHN_Right;
HitNormal.x = Sign( Offset.x );
}
}
if( Abs( Offset.y ) < SMALLER_EPSILON )
{
if( m_Start.y < Box.m_Min.y || m_Start.y > Box.m_Max.y )
{
return false;
}
}
else
{
float InvOffsetY = 1.0f / Offset.y;
float T1 = ( Box.m_Min.y - m_Start.y ) * InvOffsetY;
float T2 = ( Box.m_Max.y - m_Start.y ) * InvOffsetY;
if( T1 > T2 )
{
Swap( T1, T2 );
}
MinT = Max( MinT, T1 );
MaxT = Min( MaxT, T2 );
if( MinT > MaxT )
{
return false;
}
if( MinT == T1 )
{
EnumHitNormal = ( Offset.y > 0.0f ) ? CollisionInfo2D::EHN_Up : CollisionInfo2D::EHN_Down;
HitNormal.y = Sign( Offset.y );
}
}
if( MinT > 1.0f )
{
return false;
}
ASSERT( EnumHitNormal != CollisionInfo2D::EHN_None );
if( pInfo )
{
pInfo->m_Collision = true;
pInfo->m_EHitNormal = EnumHitNormal;
pInfo->m_HitNormal = HitNormal;
pInfo->m_HitT = MinT;
pInfo->m_Intersection = m_Start + Offset * MinT;
}
return true;
}