本文整理汇总了C#中Box2D.Common.b2Vec2.SetZero方法的典型用法代码示例。如果您正苦于以下问题:C# b2Vec2.SetZero方法的具体用法?C# b2Vec2.SetZero怎么用?C# b2Vec2.SetZero使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Box2D.Common.b2Vec2
的用法示例。
在下文中一共展示了b2Vec2.SetZero方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: RayCast
public bool RayCast(out b2RayCastOutput output, b2RayCastInput input)
{
float tmin = -float.MaxValue;
float tmax = float.MaxValue;
b2Vec2 p = input.p1;
b2Vec2 d = input.p2 - input.p1;
b2Vec2 absD = b2Math.b2Abs(d);
b2Vec2 normal = new b2Vec2(0,0);
for (int i = 0; i < 2; ++i)
{
float p_i, lb, ub, d_i, absd_i;
p_i = (i == 0 ? p.x : p.y);
lb = (i == 0 ? m_lowerBound.x : m_lowerBound.y);
ub = (i == 0 ? m_upperBound.x : m_upperBound.y);
absd_i = (i == 0 ? absD.x : absD.y);
d_i = (i == 0 ? d.x : d.y);
if (absd_i < b2Settings.b2_epsilon)
{
// Parallel.
if (p_i < lb || ub < p_i)
{
output.fraction = 0f;
output.normal = new b2Vec2(0, 0);
return false;
}
}
else
{
float inv_d = 1.0f / d_i;
float t1 = (lb - p_i) * inv_d;
float t2 = (ub - p_i) * inv_d;
// Sign of the normal vector.
float s = -1.0f;
if (t1 > t2)
{
b2Math.b2Swap(t1, t2);
s = 1.0f;
}
// Push the min up
if (t1 > tmin)
{
normal.SetZero();
if (i == 0)
{
normal.x = s;
}
else
{
normal.y = s;
}
tmin = t1;
}
// Pull the max down
tmax = Math.Min(tmax, t2);
if (tmin > tmax)
{
output.fraction = 0f;
output.normal = new b2Vec2(0, 0);
return false;
}
}
}
// Does the ray start inside the box?
// Does the ray intersect beyond the max fraction?
if (tmin < 0.0f || input.maxFraction < tmin)
{
output.fraction = 0f;
output.normal = new b2Vec2(0, 0);
return false;
}
// Intersection.
output.fraction = tmin;
output.normal = normal;
return true;
}