Class OrientedPoint2d

java.lang.Object
org.djutils.draw.point.Point2d
org.djutils.draw.point.OrientedPoint2d
All Implemented Interfaces:
Serializable, Drawable<Point2d>, Drawable2d, Oriented<OrientedPoint2d>, Oriented2d<OrientedPoint2d>, Point<Point2d>

public class OrientedPoint2d extends Point2d implements Oriented2d<OrientedPoint2d>
The OrientedPoint2d is a point in a 2-dimensional space with an orientation vector, which is specified in terms of its counter-clockwise rotation around the point in radians.

Copyright (c) 2020-2024 Delft University of Technology, PO Box 5, 2600 AA, Delft, the Netherlands. All rights reserved.
BSD-style license. See DJUTILS License.

Author:
Alexander Verbraeck, Peter Knoppers
See Also:
  • Field Details

    • dirZ

      public final double dirZ
      The counter-clockwise rotation around the point in radians.
  • Constructor Details

    • OrientedPoint2d

      public OrientedPoint2d(double x, double y) throws IllegalArgumentException
      Construct an oriented point with an x and y coordinate and a direction equal to 0.0.
      Parameters:
      x - double; the x coordinate
      y - double; the y coordinate
      Throws:
      IllegalArgumentException - when any coordinate is NaN
    • OrientedPoint2d

      public OrientedPoint2d(double x, double y, double dirZ) throws IllegalArgumentException
      Construct an oriented point with an x and y coordinate and a direction.
      Parameters:
      x - double; the x coordinate
      y - double; the y coordinate
      dirZ - double; the counter-clockwise rotation around the point in radians
      Throws:
      IllegalArgumentException - when any coordinate or dirZ is NaN
    • OrientedPoint2d

      public OrientedPoint2d(double[] xy, double dirZ) throws IllegalArgumentException
      Construct an oriented point with an x and y coordinate and a direction.
      Parameters:
      xy - double[]; the x and y coordinate
      dirZ - double; the counter-clockwise rotation around the point in radians
      Throws:
      NullPointerException - when xy is null
      IllegalArgumentException - when the dimension of xy is not 2 or any value in xy is NaN or rotZ is NaN
    • OrientedPoint2d

      public OrientedPoint2d(Point2D point, double dirZ) throws IllegalArgumentException
      Construct an oriented point from an AWT Point2D and a direction.
      Parameters:
      point - Point2D; an AWT Point2D
      dirZ - double; the counter-clockwise rotation around the point in radians
      Throws:
      IllegalArgumentException - when any coordinate in point is NaN, or rotZ is NaN
    • OrientedPoint2d

      public OrientedPoint2d(Point2d point, double dirZ) throws IllegalArgumentException
      Construct an oriented point from a Point2d and a direction.
      Parameters:
      point - Point2d; a point (with or without orientation)
      dirZ - double; the counter-clockwise rotation around the point in radians
      Throws:
      IllegalArgumentException - when rotZ is NaN
  • Method Details

    • translate

      public OrientedPoint2d translate(double dx, double dy) throws IllegalArgumentException
      Return a new Point with a translation by the provided dx and dy.
      Overrides:
      translate in class Point2d
      Parameters:
      dx - double; the horizontal translation
      dy - double; the vertical translation
      Returns:
      P; a new point with the translated coordinates
      Throws:
      IllegalArgumentException - when dx, or dy is NaN
    • translate

      public OrientedPoint3d translate(double dx, double dy, double z) throws IllegalArgumentException
      Return a new Point3d with a translation by the provided delta-x, delta-y and delta-z. If this is an OrientedPoint2d, then the result is an OrientedPoint3d with rotX copied from this and rotY and rotZ are set to 0.0.
      Overrides:
      translate in class Point2d
      Parameters:
      dx - double; the x translation
      dy - double; the y translation
      z - double; the z translation
      Returns:
      Point2d; a new point with the translated coordinates
      Throws:
      IllegalArgumentException - when dx, dy, or dz is NaN
    • scale

      public OrientedPoint2d scale(double factor) throws IllegalArgumentException
      Return a new Point with the coordinates of this point scaled by the provided factor.
      Specified by:
      scale in interface Point<Point2d>
      Overrides:
      scale in class Point2d
      Parameters:
      factor - double; the scale factor
      Returns:
      Point; a new point with the coordinates of this point scaled by the provided factor
      Throws:
      IllegalArgumentException - when factor is NaN
    • neg

      public OrientedPoint2d neg()
      Return a new Point with negated coordinate values.
      Specified by:
      neg in interface Oriented<OrientedPoint2d>
      Specified by:
      neg in interface Point<Point2d>
      Overrides:
      neg in class Point2d
      Returns:
      Point; a new point with negated coordinate values
    • abs

      public OrientedPoint2d abs()
      Return a new Point with absolute coordinate values.
      Specified by:
      abs in interface Point<Point2d>
      Overrides:
      abs in class Point2d
      Returns:
      Point; a new point with absolute coordinate values
    • normalize

      public OrientedPoint2d normalize()
      Return a new Point with a distance of 1 to the origin.
      Specified by:
      normalize in interface Point<Point2d>
      Overrides:
      normalize in class Point2d
      Returns:
      Point; the normalized point
    • interpolate

      public OrientedPoint2d interpolate(OrientedPoint2d otherPoint, double fraction) throws NullPointerException, IllegalArgumentException
      Interpolate towards another Point with a fraction. It is allowed for fraction to be less than zero or larger than 1. In that case the interpolation turns into an extrapolation. DirZ is interpolated using the AngleUtil.interpolateShortest method.
      Parameters:
      otherPoint - OrientedPoint2d; the other point
      fraction - double; the factor for interpolation towards the other point. When <code>fraction</code> is between 0 and 1, it is an interpolation, otherwise an extrapolation. If fraction is 0; this Point is returned; if fraction is 1, the other point is returned
      Returns:
      OrientedPoint2d; a new OrientedPoint2d at the requested fraction
      Throws:
      NullPointerException - when otherPoint is null
      IllegalArgumentException - when fraction is NaN
    • rotate

      public OrientedPoint2d rotate(double rotateZ) throws IllegalArgumentException
      Return a new OrientedPoint2d with an in-place rotation around the z-axis by the provided delta. The resulting rotation is normalized between -π and π.
      Parameters:
      rotateZ - double; the rotation around the z-axis
      Returns:
      OrientedPoint; a new point with the same coordinates and applied rotation
      Throws:
      IllegalArgumentException - when deltaRotZ is NaN
    • getDirZ

      public double getDirZ()
      Return the rotation around the z-axis in radians.
      Specified by:
      getDirZ in interface Oriented<OrientedPoint2d>
      Returns:
      double; the rotation around the z-axis in radians
    • getPoints

      public Iterator<? extends OrientedPoint2d> getPoints()
      Retrieve, or generate all points that make up the object.
      Specified by:
      getPoints in interface Drawable<Point2d>
      Overrides:
      getPoints in class Point2d
      Returns:
      Iterable<Point2d>; an iterator that generates all points that make up the object
    • toString

      public String toString()
      Produce a string describing the Drawable using default conversion for the (double) coordinate values. Regrettably, it is not allowed to provide a default implementation here.
      Specified by:
      toString in interface Drawable<Point2d>
      Overrides:
      toString in class Point2d
      Returns:
      String; a string describing the Drawable
    • toString

      public String toString(String doubleFormat, boolean doNotIncludeClassName)
      Produce a String describing the Drawable.
      Specified by:
      toString in interface Drawable<Point2d>
      Overrides:
      toString in class Point2d
      Parameters:
      doubleFormat - String; a format string (something like "%6.3f") which will be used to render every coordinate value)
      doNotIncludeClassName - boolean; if true; the output of toString is not prefixed by the class name. This is useful for concatenating the textual representation of lots of Drawables (e.g. an array, or a List).
      Returns:
      String; textual representation of the Drawable
    • epsilonEquals

      public boolean epsilonEquals(OrientedPoint2d other, double epsilonCoordinate, double epsilonRotation) throws NullPointerException, IllegalArgumentException
      Compare this Oriented with another Oriented with specified tolerances in the coordinates and the angles.
      Specified by:
      epsilonEquals in interface Oriented<OrientedPoint2d>
      Parameters:
      other - O; the point to compare with
      epsilonCoordinate - double; the upper bound of difference for one of the coordinates; use Double.POSITIVE_INFINITY if you do not want to check the coordinates
      epsilonRotation - double; the upper bound of difference for the direction(s); use Double.POSITIVE_INFINITY if you do not want to check the angles
      Returns:
      boolean; true if x, y, and z are less than epsilonCoordinate apart, and rotX, rotY and rotZ are less than epsilonRotation apart, otherwise false
      Throws:
      NullPointerException - when other is null
      IllegalArgumentException - epsilonCoordinate or epsilonRotation is NaN or negative
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Point2d
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Point2d