public override Rect Apply(Rect oldDataRect, Rect newDataRect, Viewport2D viewport) { double ratio = newDataRect.Width / newDataRect.Height; double coeff = Math.Sqrt(ratio); double newWidth = newDataRect.Width / coeff; double newHeight = newDataRect.Height * coeff; Point center = newDataRect.GetCenter(); Rect res = RectExtensions.FromCenterSize(center, newWidth, newHeight); return res; }
public override Rect Apply(Rect oldDataRect, Rect newDataRect, Viewport2D viewport) { Rect output = viewport.Output; if (output.Width == 0 || output.Height == 0) return newDataRect; double screenRatio = output.Width / output.Height; double viewportRatio = newDataRect.Width / newDataRect.Height; double ratio = screenRatio / viewportRatio; double width = proportionRatio * newDataRect.Width * ratio; double height = newDataRect.Height; if (width < newDataRect.Width) { height = newDataRect.Height / proportionRatio / ratio; width = newDataRect.Width; } Point center = newDataRect.GetCenter(); Rect res = RectExtensions.FromCenterSize(center, width, height); return res; }
public static Rect RectZoom(Rect rect, double ratio) { return RectZoom(rect, rect.GetCenter(), ratio); }
public static Rect RectZoom(Rect rect, double horizontalRatio, double verticalRatio) { return RectZoom(rect, rect.GetCenter(), horizontalRatio, verticalRatio); }
private static IEnumerable<Point> Quadivide(Rect area) { if (area.Width > 0 && area.Height > 0) { var center = area.GetCenter(); var x = Math.Floor(center.X); var y = Math.Floor(center.Y); yield return new Point(x, y); var quad1 = new Rect(area.TopLeft, new Point(x, y + 1)); var quad2 = new Rect(area.TopRight, new Point(x, y)); var quad3 = new Rect(area.BottomLeft, new Point(x + 1, y + 1)); var quad4 = new Rect(area.BottomRight, new Point(x + 1, y)); var quads = new Queue<IEnumerator<Point>>(); quads.Enqueue(Quadivide(quad1).GetEnumerator()); quads.Enqueue(Quadivide(quad2).GetEnumerator()); quads.Enqueue(Quadivide(quad3).GetEnumerator()); quads.Enqueue(Quadivide(quad4).GetEnumerator()); while (quads.Count > 0) { var quad = quads.Dequeue(); if (quad.MoveNext()) { yield return quad.Current; quads.Enqueue(quad); } } } }
protected Rect EnlargeRect(Rect rect) { Size newSize = rect.Size; newSize.Width += 1; newSize.Height += 1; Rect result = RectExtensions.FromCenterSize(rect.GetCenter(), newSize); return result; //double coeff = 1 + 1.0 / tileWidth; //return EnlargeRect(rect, coeff); }