public Polygon RectangleInside() { var p1 = Vector2.zero; var p2 = Vector2.zero; var maxLength = float.MinValue; ForEachEdge((a, b, i) => { var len = (a - b).magnitude; if (len > maxLength) { p1 = a; p2 = b; maxLength = len; } }); var rotated = Rotate(GeometryHelpers.Angle(p1 - p2)); var minY = rotated.Vertices.Min(v => v.y); var greatestDistance = rotated.Vertices.Max(v => v.y - minY); var normal = GeometryHelpers.Rotate90(p2 - p1).normalized; var newHouse = new Polygon(p1, p2, p2 - GeometryHelpers.Scale(normal, greatestDistance), p1 - GeometryHelpers.Scale(normal, greatestDistance)).ZoomShrink(0.2f); newHouse = newHouse.Translate(newHouse.Center - Center); return(newHouse); }
public Polygon SortPointsClockwise() { var sortedVertices = Vertices.OrderBy(v => GeometryHelpers.Angle(v - Center)).ToList(); return(new Polygon(sortedVertices)); }