예제 #1
0
        public static bool Contains(Polygon containingPolygon, Segment containedSegement)
        {
            // Il suffit de contenir les deux extrémités du segment et de ne jamais croiser le segment
            // À part si le croisement se fait sur une extremité

            bool result;

            if (Cross(containingPolygon, containedSegement))
            {
                // Si ça se croise : ça peut encore être les extremités qui touchent

                List <RealPoint> crossPoints = GetCrossingPoints(containingPolygon, containedSegement);
                if (crossPoints.Count > 2)
                {
                    // Plus de 2 croisements : le segment n'est pas contenu
                    result = false;
                }
                else
                {
                    // Maximum 2 croisements (= les 2 extremités) : le segment est contenu si les 2 extremités et le milieu sont contenus
                    if (PolygonWithRealPoint.Contains(containingPolygon, containedSegement.StartPoint) && PolygonWithRealPoint.Contains(containingPolygon, containedSegement.EndPoint) && PolygonWithRealPoint.Contains(containingPolygon, containedSegement.Barycenter))
                    {
                        result = true;
                    }
                    else
                    {
                        result = false;
                    }
                }
            }
            else
            {
                // Pas de croisement, il suffit de contenir un point du segment
                result = PolygonWithRealPoint.Contains(containingPolygon, containedSegement.StartPoint);
            }

            return(result);
        }
예제 #2
0
 public static bool Contains(Polygon containingPolygon, Circle containedCircle)
 {
     // Pour contenir un cercle, un polygone ne doit pas être contenu par le cercle, ne pas le croiser et contenir son centre
     return(!CircleWithPolygon.Contains(containedCircle, containingPolygon) && !PolygonWithCircle.Cross(containingPolygon, containedCircle) && PolygonWithRealPoint.Contains(containingPolygon, containedCircle.Center));
 }