/// <summary> /// Indica a que lado esta el rectangulo respecto de la linea: /// - Si == 0, toca la linea o la cruza. /// - Si > 0 esta debajo/derecha de la linea. /// - Si < 0 esta encima/izquierda de la linea. /// </summary> public LineSide WhichSide(BoundingBox2d r) { int[] sides = new int[3]; foreach (Point2d p in r.GetVertices()) { LineSide lado = this.WhichSide(p); sides[(int)lado]++; } if (sides[(int)LineSide.Middle] > 0) { // Toca la linea. return(LineSide.Middle); } if ((sides[(int)LineSide.Left] > 0) && (sides[(int)LineSide.Right] > 0)) { // Cruza la linea. return(LineSide.Middle); } if (sides[(int)LineSide.Left] > 0) { // totalmente a un lado return(LineSide.Left); } // if (sides[(int)Side.Right] > 0) // totalmente a un lado return(LineSide.Right); }
public static BoundingBox2d DoTransform(this ITransform2 transform, BoundingBox2d bbox) { return(BoundingBox2d.UnionOfPoints(bbox.GetVertices().Select(v => transform.DoTransform(v)))); }