本文整理汇总了C++中b2Vec2::SetZero方法的典型用法代码示例。如果您正苦于以下问题:C++ b2Vec2::SetZero方法的具体用法?C++ b2Vec2::SetZero怎么用?C++ b2Vec2::SetZero使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类b2Vec2
的用法示例。
在下文中一共展示了b2Vec2::SetZero方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
// Compute allowable normal ranges based on adjacency.
// A normal n is allowable iff:
// cross(n, n1) >= 0.0f && cross(n2, n) >= 0.0f
// n points from A to B (edge to polygon)
void b2EPCollider::ComputeAdjacency()
{
b2Vec2 v0 = m_edgeA.v0;
b2Vec2 v1 = m_edgeA.v1;
b2Vec2 v2 = m_edgeA.v2;
b2Vec2 v3 = m_edgeA.v3;
// Determine allowable the normal regions based on adjacency.
// Note: it may be possible that no normal is admissable.
b2Vec2 centerB = m_proxyB.centroid;
if (m_edgeA.hasVertex0)
{
b2Vec2 e0 = v1 - v0;
b2Vec2 e1 = v2 - v1;
b2Vec2 n0(e0.y, -e0.x);
b2Vec2 n1(e1.y, -e1.x);
n0.Normalize();
n1.Normalize();
bool convex = b2Cross(n0, n1) >= 0.0f;
bool front0 = b2Dot(n0, centerB - v0) >= 0.0f;
bool front1 = b2Dot(n1, centerB - v1) >= 0.0f;
if (convex)
{
if (front0 || front1)
{
m_limit11 = n1;
m_limit12 = n0;
}
else
{
m_limit11 = -n1;
m_limit12 = -n0;
}
}
else
{
if (front0 && front1)
{
m_limit11 = n0;
m_limit12 = n1;
}
else
{
m_limit11 = -n0;
m_limit12 = -n1;
}
}
}
else
{
m_limit11.SetZero();
m_limit12.SetZero();
}
if (m_edgeA.hasVertex3)
{
b2Vec2 e1 = v2 - v1;
b2Vec2 e2 = v3 - v2;
b2Vec2 n1(e1.y, -e1.x);
b2Vec2 n2(e2.y, -e2.x);
n1.Normalize();
n2.Normalize();
bool convex = b2Cross(n1, n2) >= 0.0f;
bool front1 = b2Dot(n1, centerB - v1) >= 0.0f;
bool front2 = b2Dot(n2, centerB - v2) >= 0.0f;
if (convex)
{
if (front1 || front2)
{
m_limit21 = n2;
m_limit22 = n1;
}
else
{
m_limit21 = -n2;
m_limit22 = -n1;
}
}
else
{
if (front1 && front2)
{
m_limit21 = n1;
m_limit22 = n2;
}
else
{
m_limit21 = -n1;
m_limit22 = -n2;
}
}
}
//.........这里部分代码省略.........