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 static bool PointInShapes(Vector2D point) { foreach (ShapeObject shape in ShapeObject.GetList()) { if (shape.GetWorldPolygon().PointInPoly(point)) { return(true); } } return(false); }
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; }
static public void DrawFill(ShapeFill shape) { Vector2 pointInWorld; Vector2D pointInWorld2D = Vector2D.Zero(); foreach (Vector2D point in shape.pointsIn) { pointInWorld = shape.transform.TransformPoint(point.ToVector2()); pointInWorld2D.x = pointInWorld.x; pointInWorld2D.y = pointInWorld.y; if (ShapeObject.PointInShapes(pointInWorld2D) == false) { ShapeDraw.Draw(pointInWorld, shape.transform); } } }
public ShapeFillResult(ShapeFill shapeFill) { allPoints = shapeFill.pointsIn.Count; pointsIn = 0; Vector2 pointInWorld; Vector2D pointInWorld2D = Vector2D.Zero(); foreach(Vector2D point in shapeFill.pointsIn) { pointInWorld = shapeFill.transform.TransformPoint(point.ToVector2()); pointInWorld2D.x = pointInWorld.x; pointInWorld2D.y = pointInWorld.y; if (ShapeObject.PointInShapes(pointInWorld2D) == false) { pointsIn ++; } } percentage = (float)pointsIn / allPoints; }
public static void DrawMatch(ShapeObject shapeA, ShapeObject shapeB) { 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)) { ShapeDraw.Draw(pointInWorld, shapeA.transform); } } 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)) { ShapeDraw.Draw(pointInWorld, shapeB.transform); } } }
public static ShapeMatchResult GetMatch(ShapeObject shapeA, ShapeObject shapeB, ShapeMatchType type = ShapeMatchType.World) { return(new ShapeMatchResult(shapeA, shapeB, type)); }