public Image(Map map, Draw.Image image, Geometry2D.Single.Box source, Geometry2D.Single.Box destination) { this.Map = map; this.Data = image; this.Source = source; this.Destination = destination; }
protected Image(Image original) : base(original) { this.Map = original.Map; this.Data = original.Data; this.Source = original.Source; this.Destination = original.Destination; }
protected override Geometry2D.Single.Box SegmentBounds(Geometry2D.Single.Transform transform) { Geometry2D.Single.Box result = new Geometry2D.Single.Box(); Tuple<Geometry2D.Single.Point, float, float> coordinates = this.PlatformctArcCoordinates(); float startAngle = coordinates.Item2; float endAngle = coordinates.Item3; Geometry2D.Single.Transform derivative = new Geometry2D.Single.Transform(transform.A, transform.B, transform.C, transform.D, 0, 0); Geometry2D.Single.Transform inverse = derivative.Inverse; Geometry2D.Single.Point e1p = inverse * new Geometry2D.Single.Point(1, 0); Geometry2D.Single.Point e2p = inverse * new Geometry2D.Single.Point(0, 1); Collection.List<float> angles = new Collection.List<float>(); angles.Add(startAngle); angles.Add(endAngle); this.AnglesAdd(angles, Kean.Math.Single.ArcusTangensExtended(-e1p.X * this.Radius.Height, e1p.Y * this.Radius.Width), startAngle, endAngle); this.AnglesAdd(angles, Kean.Math.Single.ArcusTangensExtended(-e2p.X * this.Radius.Height, e2p.Y * this.Radius.Width), startAngle, endAngle); Geometry2D.Single.Point[] points = new Geometry2D.Single.Point[angles.Count]; for (int i = 0; i < points.Length; i++) { float angle = angles[i]; points[i] = transform * (new Geometry2D.Single.Point(this.Radius.Width * Kean.Math.Single.Cosinus(angle), this.Radius.Height * Kean.Math.Single.Sinus(angle)) + coordinates.Item1); } result = Geometry2D.Single.Box.Bounds(points); return result; }