本文整理汇总了C#中Geometry.GetAxes方法的典型用法代码示例。如果您正苦于以下问题:C# Geometry.GetAxes方法的具体用法?C# Geometry.GetAxes怎么用?C# Geometry.GetAxes使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Geometry
的用法示例。
在下文中一共展示了Geometry.GetAxes方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: FindIntersection
public SatResult? FindIntersection(Geometry a, Geometry b)
{
var aAxes = a.GetAxes(b);
var bAxes = b.GetAxes(a);
var totalAxes = aAxes.Length + bAxes.Length;
Vector2 normal = Vector2.Zero;
Vector2 deepestPoint = Vector2.Zero;
float smallestOverlap = float.MaxValue;
for (int i = 0; i < totalAxes; i++)
{
Vector2 axis;
if (i < aAxes.Length)
axis = aAxes[i];
else
axis = bAxes[i - aAxes.Length];
Vector2.Normalize(ref axis, out axis);
var aProjection = a.Project(axis);
var bProjection = b.Project(axis);
float overlap;
int order;
if (!aProjection.Overlaps(bProjection, out overlap, out order))
return null;
if (overlap < smallestOverlap)
{
smallestOverlap = overlap;
normal = axis;
if (order < 0)
normal = -normal;
if (i < aAxes.Length)
{
if (order > 0) // if a is before b
deepestPoint = bProjection.StartPoint;
else
deepestPoint = bProjection.EndPoint;
}
else
{
if (order > 0)
deepestPoint = aProjection.EndPoint;
else
deepestPoint = aProjection.StartPoint;
}
}
}
var axisMagnitude = normal.Length();
normal /= axisMagnitude;
smallestOverlap /= axisMagnitude;
return new SatResult() { A = a, B = b, NormalAxis = normal, Penetration = smallestOverlap, DeepestPoint = deepestPoint };
}