void CalculateWorld(ShapeObject shapeA, ShapeObject shapeB, ShapeMatchType type) { Vector2 pointInWorld; Vector2D pointInWorld2D = Vector2D.Zero(); Polygon2D polyInWorld; foreach (Vector2D point in shapeA.pointsIn) { pointInWorld = shapeA.transform.TransformPoint(point.ToVector2()); pointInWorld2D.x = pointInWorld.x; pointInWorld2D.y = pointInWorld.y; polyInWorld = shapeB.GetWorldPolygon(); if (polyInWorld.PointInPoly(pointInWorld2D)) { pointsIn++; } } foreach (Vector2D point in shapeB.pointsIn) { pointInWorld = shapeB.transform.TransformPoint(point.ToVector2()); pointInWorld2D.x = pointInWorld.x; pointInWorld2D.y = pointInWorld.y; polyInWorld = shapeA.GetWorldPolygon(); if (polyInWorld.PointInPoly(pointInWorld2D)) { pointsIn++; } } }
public ShapeMatchResult(ShapeObject shapeA, ShapeObject shapeB, ShapeMatchType type) { allPoints = shapeA.pointsIn.Count + shapeB.pointsIn.Count; pointsIn = 0; switch (type) { case ShapeMatchType.Local: CalculateLocal(shapeA, shapeB, type); break; case ShapeMatchType.World: CalculateWorld(shapeA, shapeB, type); break; } percentage = (float)pointsIn / allPoints; }
public static ShapeMatchResult GetMatch(ShapeObject shapeA, ShapeObject shapeB, ShapeMatchType type = ShapeMatchType.World) { return(new ShapeMatchResult(shapeA, shapeB, type)); }