Class ShapeUtilities


  • public final class ShapeUtilities
    extends Object
    Static utilities methods. Those methods operate on geometric shapes from the java.awt.geom package.
    Since:
    2.0
    Author:
    Martin Desruisseaux (IRD)
    • Field Summary

      Fields 
      Modifier and Type Field Description
      static int HORIZONTAL
      Constante pour les calculs de paraboles.
      static int PARALLEL
      Constante pour les calculs de paraboles.
    • Method Summary

      All Methods Static Methods Concrete Methods 
      Modifier and Type Method Description
      static Point2D circleCentre​(double x1, double y1, double x2, double y2, double x3, double y3)
      Retourne la coordonnée centrale d'un cercle passant pas les trois points spécifiés.
      static Point2D colinearPoint​(double x1, double y1, double x2, double y2, double x, double y, double distance)
      Retourne le point sur le segment de droite (x1,y1)-(x2,y2) qui se trouve à la distance distance spécifiée du point point.
      static Point2D colinearPoint​(Line2D line, Point2D point, double distance)
      Retourne le point sur le segment de droite line qui se trouve à la distance distance spécifiée du point point.
      static Ellipse2D fitCircle​(Point2D P1, Point2D P2, Point2D P3)
      Retourne un cercle qui passe par chacun des trois points spécifiés.
      static QuadCurve2D fitParabol​(double x0, double y0, double x1, double y1, double x2, double y2, int orientation)
      Retourne une courbe quadratique passant par les trois points spécifiés.
      static QuadCurve2D fitParabol​(Point2D P0, Point2D P1, Point2D P2, int orientation)
      Retourne une courbe quadratique passant par les trois points spécifiés.
      static double getFlatness​(Shape shape)
      Returns a suggested value for the flatness argument in Shape.getPathIterator(AffineTransform,double) for the specified shape.
      static Point2D intersectionPoint​(double ax1, double ay1, double ax2, double ay2, double bx1, double by1, double bx2, double by2)
      Retourne le point d'intersection de deux segments de droites.
      static Point2D intersectionPoint​(Line2D a, Line2D b)
      Retourne le point d'intersection de deux segments de droites.
      static Point2D nearestColinearPoint​(double x1, double y1, double x2, double y2, double x, double y)
      Retourne le point sur le segment de droite (x1,y1)-(x2,y2) qui se trouve le plus près du point (x,y) spécifié.
      static Point2D nearestColinearPoint​(Line2D segment, Point2D point)
      Retourne le point sur le segment de droite line qui se trouve le plus près du point point spécifié.
      static Point2D parabolicControlPoint​(double x0, double y0, double x1, double y1, double x2, double y2, int orientation, Point2D dest)
      Retourne le point de contrôle d'une courbe quadratique passant par les trois points spécifiés.
      static Shape toPrimitive​(Shape path)
      Tente de remplacer la forme géométrique path par une des formes standards de Java2D.
      • Methods inherited from class Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Field Detail

      • PARALLEL

        public static final int PARALLEL
        Constante pour les calculs de paraboles. Cette constante indique que l'axe des x de la parabole doit être parallèle à la droite joignant les points P0 et P2.
        See Also:
        Constant Field Values
      • HORIZONTAL

        public static final int HORIZONTAL
        Constante pour les calculs de paraboles. Cette constante indique que l'axe des x de la parabole doit être horizontale, quelle que soit la pente de la droite joignant les points P0 et P2.
        See Also:
        Constant Field Values
    • Method Detail

      • intersectionPoint

        public static Point2D intersectionPoint​(Line2D a,
                                                Line2D b)
        Retourne le point d'intersection de deux segments de droites. Cette méthode ne prolonge pas les segments de droites à l'infini. Si les deux segments ne s'interceptent pas (soit par ce qu'ils sont parallèles, ou soit parce qu'ils ne se prolongent pas assez loin pour se toucher), alors cette méthode retourne null.
        Parameters:
        a - Première ligne.
        b - Deuxième ligne.
        Returns:
        Si une intersection fut trouvée, les coordonnées de cette intersection. Si aucune intersection n'a été trouvée, alors cette méthode retourne null.
      • intersectionPoint

        public static Point2D intersectionPoint​(double ax1,
                                                double ay1,
                                                double ax2,
                                                double ay2,
                                                double bx1,
                                                double by1,
                                                double bx2,
                                                double by2)
        Retourne le point d'intersection de deux segments de droites. Cette méthode ne prolonge pas les segments de droites à l'infini. Si les deux segments ne s'interceptent pas (soit par ce qu'ils sont parallèles, ou soit parce qu'ils ne se prolongent pas assez loin pour se toucher), alors cette méthode retourne null.
        Parameters:
        ax1 - x value of the first point on the first line.
        ay1 - y value of the first point on the first line.
        ax2 - x value of the last point on the first line.
        ay2 - y value of the last point on the first line.
        bx1 - x value of the first point on the second line.
        by1 - y value of the first point on the second line.
        bx2 - x value of the last point on the second line.
        by2 - y value of the last point on the second line.
        Returns:
        Si une intersection fut trouvée, les coordonnées de cette intersection. Si aucune intersection n'a été trouvée, alors cette méthode retourne null.
      • nearestColinearPoint

        public static Point2D nearestColinearPoint​(Line2D segment,
                                                   Point2D point)
        Retourne le point sur le segment de droite line qui se trouve le plus près du point point spécifié. Appellons result le point retourné par cette méthode. Il est garanti que result répond aux conditions suivantes (aux erreurs d'arrondissements près):
        • result est un point du segment de droite line. Il ne trouve pas au delà des points extrêmes P1 et P2 de ce segment.
        • La distance entre les points result et point est la plus courte distance possible pour les points qui respectent la condition précédente. Cette distance peut être calculée par point.distance(result).
        Parameters:
        segment - The line on which to search for a point.
        point - A point close to the given line.
        Returns:
        The nearest point on the given line.
        See Also:
        colinearPoint(Line2D, Point2D, double)
      • nearestColinearPoint

        public static Point2D nearestColinearPoint​(double x1,
                                                   double y1,
                                                   double x2,
                                                   double y2,
                                                   double x,
                                                   double y)
        Retourne le point sur le segment de droite (x1,y1)-(x2,y2) qui se trouve le plus près du point (x,y) spécifié. Appellons result le point retourné par cette méthode. Il est garanti que result répond aux conditions suivantes (aux erreurs d'arrondissements près):
        • result est un point du segment de droite (x1,y1)-(x2,y2). Il ne trouve pas au delà des points extrêmes (x1,y1) et (x2,y2) de ce segment.
        • La distance entre les points result et (x,y) est la plus courte distance possible pour les points qui respectent la condition précédente. Cette distance peut être calculée par new Point2D.Double(x,y).distance(result) .
        Parameters:
        x1 - x value of the first point on the line.
        y1 - y value of the first point on the line.
        x2 - x value of the last point on the line.
        y2 - y value of the last point on the line.
        x - x value of a point close to the given line.
        y - y value of a point close to the given line.
        Returns:
        The nearest point on the given line.
        See Also:
        colinearPoint(double,double , double,double , double,double , double)
      • colinearPoint

        public static Point2D colinearPoint​(Line2D line,
                                            Point2D point,
                                            double distance)
        Retourne le point sur le segment de droite line qui se trouve à la distance distance spécifiée du point point. Appellons result le point retourné par cette méthode. Si result est non-nul, alors il est garanti qu'il répond aux conditions suivantes (aux erreurs d'arrondissements près):
        • result est un point du segment de droite line. Il ne trouve pas au delà des points extrêmes P1 et P2 de ce segment.
        • La distance entre les points result et point est exactement distance (aux erreurs d'arrondissements près). Cette distance peut être calculée par point.distance(result).
        Si aucun point ne peut répondre à ces conditions, alors cette méthode retourne null. Si deux points peuvent répondre à ces conditions, alors par convention cette méthode retourne le point le plus près du point line.getP1().
        Parameters:
        line - The line on which to searh for a point.
        point - A point close to the given line.
        distance - The distance between the given point and the point to be returned.
        Returns:
        A point on the given line located at the given distance from the given point.
        See Also:
        nearestColinearPoint(Line2D, Point2D)
      • colinearPoint

        public static Point2D colinearPoint​(double x1,
                                            double y1,
                                            double x2,
                                            double y2,
                                            double x,
                                            double y,
                                            double distance)
        Retourne le point sur le segment de droite (x1,y1)-(x2,y2) qui se trouve à la distance distance spécifiée du point point. Appellons result le point retourné par cette méthode. Si result est non-nul, alors il est garantit qu'il répond aux conditions suivantes (aux erreurs d'arrondissements près):
        • result est un point du segment de droite (x1,y1)-(x2,y2). Il ne trouve pas au delà des points extrêmes (x1,y1) et (x2,y2) de ce segment.
        • La distance entre les points result et point est exactement distance (aux erreurs d'arrondissements près). Cette distance peut être calculée par point.distance(result).
        Si aucun point ne peut répondre à ces conditions, alors cette méthode retourne null. Si deux points peuvent répondre à ces conditions, alors par convention cette méthode retourne le point le plus près du point (x1,y1).
        Parameters:
        x1 - x value of the first point on the line.
        y1 - y value of the first point on the line.
        x2 - x value of the last point on the line.
        y2 - y value of the last point on the line.
        x - x value of a point close to the given line.
        y - y value of a point close to the given line.
        distance - The distance between the given point and the point to be returned.
        Returns:
        A point on the given line located at the given distance from the given point.
        See Also:
        nearestColinearPoint(double,double , double,double , double,double)
      • fitParabol

        public static QuadCurve2D fitParabol​(Point2D P0,
                                             Point2D P1,
                                             Point2D P2,
                                             int orientation)
                                      throws IllegalArgumentException
        Retourne une courbe quadratique passant par les trois points spécifiés. Il peut exister une infinité de courbes quadratiques passant par trois points. On peut voir les choses en disant qu'une courbe quadratique correspond à une parabole produite par une équation de la forme y=ax²+bx+c, mais que l'axe des x de cette équation n'est pas nécessairement horizontal. La direction de cet axe des x dépend du paramètre orientation spécifié à cette méthode. La valeur HORIZONTAL signifie que l'axe des x de la parabole sera toujours horizontal. La courbe quadratique produite ressemblera alors à une parabole classique telle qu'on en voit dans les ouvrages de mathématiques élémentaires. La valeur PARALLEL indique plutôt que l'axe des x de la parabole doit être parallèle à la droite joignant les points P0 et P2. Ce dernier type produira le même résultat que HORIZONTAL si P0.y==P2.y.
        Parameters:
        P0 - Premier point de la courbe quadratique.
        P1 - Point par lequel la courbe quadratique doit passer. Il n'est pas obligatoire que ce point soit situé entre P0 et P1. Toutefois, il ne doit pas être colinéaire avec P0 et P1.
        P2 - Dernier point de la courbe quadratique.
        orientation - Orientation de l'axe des x de la parabole: PARALLEL ou HORIZONTAL.
        Returns:
        Une courbe quadratique passant par les trois points spécifiés. La courbe commencera au point P0 et se terminera au point P2. Si deux points ont des coordonnées presque identiques, ou si les trois points sont colinéaires, alors cette méthode retourne null.
        Throws:
        IllegalArgumentException - si l'argument orientation n'est pas une des constantes valides.
      • fitParabol

        public static QuadCurve2D fitParabol​(double x0,
                                             double y0,
                                             double x1,
                                             double y1,
                                             double x2,
                                             double y2,
                                             int orientation)
                                      throws IllegalArgumentException
        Retourne une courbe quadratique passant par les trois points spécifiés. Il peut exister une infinité de courbes quadratiques passant par trois points. On peut voir les choses en disant qu'une courbe quadratique correspond à une parabole produite par une équation de la forme y=ax²+bx+c, mais que l'axe des x de cette équation n'est pas nécessairement horizontal. La direction de cet axe des x dépend du paramètre orientation spécifié à cette méthode. La valeur HORIZONTAL signifie que l'axe des x de la parabole sera toujours horizontal. La courbe quadratique produite ressemblera alors à une parabole classique telle qu'on en voit dans les ouvrages de mathématiques élémentaires. La valeur PARALLEL indique plutôt que l'axe des x de la parabole doit être parallèle à la droite joignant les points (x0,y0) et (x2,y2). Ce dernier type produira le même résultat que HORIZONTAL si y0==y2.
        Parameters:
        x0 - x value of the first point.
        y0 - y value of the first point.
        x1 - x value of the second point.
        y1 - y value of the second point.
        x2 - x value of the third point.
        y2 - y value of the third point.
        orientation - Orientation de l'axe des x de la parabole: PARALLEL ou HORIZONTAL.
        Returns:
        Une courbe quadratique passant par les trois points spécifiés. La courbe commencera au point (x0,y0) et se terminera au point (x2,y2). Si deux points ont des coordonnées presque identiques, ou si les trois points sont colinéaires, alors cette méthode retourne null.
        Throws:
        IllegalArgumentException - si l'argument orientation n'est pas une des constantes valides.
      • parabolicControlPoint

        public static Point2D parabolicControlPoint​(double x0,
                                                    double y0,
                                                    double x1,
                                                    double y1,
                                                    double x2,
                                                    double y2,
                                                    int orientation,
                                                    Point2D dest)
                                             throws IllegalArgumentException
        Retourne le point de contrôle d'une courbe quadratique passant par les trois points spécifiés. Il peut exister une infinité de courbes quadratiques passant par trois points. On peut voir les choses en disant qu'une courbe quadratique correspond à une parabole produite par une équation de la forme y=ax²+bx+c, mais que l'axe des x de cette équation n'est pas nécessairement horizontal. La direction de cet axe des x dépend du paramètre orientation spécifié à cette méthode. La valeur HORIZONTAL signifie que l'axe des x de la parabole sera toujours horizontal. La courbe quadratique produite ressemblera alors à une parabole classique telle qu'on en voit dans les ouvrages de mathématiques élémentaires. La valeur PARALLEL indique plutôt que l'axe des x de la parabole doit être parallèle à la droite joignant les points (x0,y0) et (x2,y2). Ce dernier type produira le même résultat que HORIZONTAL si y0==y2.
        Parameters:
        x0 - x value of the first point.
        y0 - y value of the first point.
        x1 - x value of the second point.
        y1 - y value of the second point.
        x2 - x value of the third point.
        y2 - y value of the third point.
        orientation - Orientation de l'axe des x de la parabole: PARALLEL ou HORIZONTAL.
        dest - Where to store the control point.
        Returns:
        Le point de contrôle d'une courbe quadratique passant par les trois points spécifiés. La courbe commencera au point (x0,y0) et se terminera au point (x2,y2). Si deux points ont des coordonnées presque identiques, ou si les trois points sont colinéaires, alors cette méthode retourne null.
        Throws:
        IllegalArgumentException - si l'argument orientation n'est pas une des constantes valides.
      • fitCircle

        public static Ellipse2D fitCircle​(Point2D P1,
                                          Point2D P2,
                                          Point2D P3)
        Retourne un cercle qui passe par chacun des trois points spécifiés.
        Parameters:
        P1 - The first point.
        P2 - The second point.
        P3 - The third point.
        Returns:
        A circle passing by the given points.
      • circleCentre

        public static Point2D circleCentre​(double x1,
                                           double y1,
                                           double x2,
                                           double y2,
                                           double x3,
                                           double y3)
        Retourne la coordonnée centrale d'un cercle passant pas les trois points spécifiés. La distance entre le point retourné et n'importe quel des points (x1,y1), (x2,y2), (x3,y3) sera constante; ce sera le rayon d'un cercle centré au point retourné et passant par les trois points spécifiés.
        Parameters:
        x1 - x value of the first point.
        y1 - y value of the first point.
        x2 - x value of the second point.
        y2 - y value of the second point.
        x3 - x value of the third point.
        y3 - y value of the third point.
        Returns:
        A circle passing by the given points.
      • toPrimitive

        public static Shape toPrimitive​(Shape path)
        Tente de remplacer la forme géométrique path par une des formes standards de Java2D. Par exemple, si path ne contient qu'un simple segment de droite ou une courbe quadratique, alors cette méthode retournera un objet Line2D ou QuadCurve2D respectivement.
        Parameters:
        path - Forme géométrique à simplifier (généralement un objet GeneralPath).
        Returns:
        Forme géométrique standard, ou path si aucun remplacement n'est proposé.
      • getFlatness

        public static double getFlatness​(Shape shape)
        Returns a suggested value for the flatness argument in Shape.getPathIterator(AffineTransform,double) for the specified shape.
        Parameters:
        shape - The shape for which to compute a flatness factor.
        Returns:
        The suggested flatness factor.