/// <summary> /// Convert the given point from virtual space to item space. /// </summary> public PointF ToLocal(PointF pt) { var points = new[] { pt }; InverseTransform.TransformPoints(points); return(points[0]); }
public override Location PointToLocation(Point point) { if (InverseTransform == null) { throw new InvalidOperationException("The CoordinateSystem property is not set."); } var coordinate = InverseTransform.Transform(new Coordinate(point.X, point.Y)); return(new Location(coordinate.Y, coordinate.X)); }
public override Color Render(int x, int y) { if (InverseTransform == null) { return(base.Render(x, y)); } Point transformed; if (!InverseTransform.TryTransform(new Point((int)(x - OffsetX), (int)(y - OffsetY)), out transformed)) { return(Colors.Transparent); } double fX = transformed.X + OffsetX; double fY = transformed.Y + OffsetY; //if (fX < 0 || fX >= Width || fY < 0 || fY >= Height) // return Colors.Transparent; //else //{ int x1 = (int)Floor(fX); int x2 = (int)Ceiling(fX); int y1 = (int)Floor(fY); int y2 = (int)Ceiling(fY); double xF = fX - x1; double yF = fY - y1; if (xF == 0) { if (yF == 0) { return(base.Render(x1, y1)); } else { return(CombineColors(base.Render(x1, y1), base.Render(x1, y2), yF)); } } else { if (yF == 0) { return(CombineColors(base.Render(x1, y1), base.Render(x2, y1), xF)); } else { return(CombineColors(CombineColors(base.Render(x1, y1), base.Render(x2, y1), xF), CombineColors(base.Render(x1, y2), base.Render(x2, y2), xF), yF)); } } //return base.Render(fX, fY); //} }
/// <summary> /// Check the collision between the hitbox and a point. /// </summary> /// <param name="pt">Point.</param> /// <param name="infinitePt">A point that can not be in the hitbox in any way.</param> /// <returns>True if there is a collision, false otherwise.</returns> public bool Collision(Vector2f pt, Vector2f infinitePt) { pt = InverseTransform.TransformPoint(pt); bool finalHit = false; foreach (var shape in Vertices) { bool currentHit = false; List <Segment> list = new List <Segment>(); { var tmp = shape.Item1.ToArray(); Vector2f old = tmp.First(); for (int i = 1; i <= tmp.Length; i++) { list.Add(new Segment(old, tmp[i % tmp.Length])); old = tmp[i % tmp.Length]; } } int hit = 0; foreach (var seg in list) { if (seg.Collision(new Segment(infinitePt, pt))) { hit++; } } currentHit = hit % 2 == 1; if (currentHit) { if (shape.Item2 == CombineMode.ADD) { finalHit = true; } else if (shape.Item2 == CombineMode.REMOVE) { finalHit = false; } else if (shape.Item2 == CombineMode.INTERSECT) { finalHit = !finalHit; } } } return(finalHit); }
public void PerformTransformInverseTransformTest() { //todo: create randomized signal instead of hard-coded one. List <int> inputTimeDomain = new List <int>() { 4, 0, 0, 0 }; Transform transform = new Transform(); InverseTransform inverseTransform = new InverseTransform(); List <int> outputTimeDomain = inverseTransform.PerformInverseTransform(transform.PerformTransform(inputTimeDomain)); Assert.AreEqual(inputTimeDomain, outputTimeDomain); }
/// <summary> /// Convert the given rectangle from virtual space to item space. /// </summary> public RectangleF ToLocal(RectangleF rect) { return(InverseTransform.Transform(rect)); }
protected virtual Vector2f ToLocalCoordinates(Vector2f source) { return(InverseTransform.TransformPoint(source)); }