Class LineSegment3d

java.lang.Object
org.djutils.draw.line.LineSegment3d
All Implemented Interfaces:
Serializable, Drawable<Point3d>, Drawable3d, LineSegment<Point3d,Ray3d>, Project<Point3d>

public class LineSegment3d extends Object implements Drawable3d, LineSegment<Point3d,Ray3d>
LineSegment3d is a line segment bound by 2 end points in 3D-space. A line segment stores the order in which it has been created, so the end points are known as 'start' and 'end'.

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

    • startX

      public final double startX
      The start x-coordinate.
    • startY

      public final double startY
      The start y-coordinate.
    • startZ

      public final double startZ
      The start z-coordinate.
    • endX

      public final double endX
      The end x-coordinate.
    • endY

      public final double endY
      The end y-coordinate.
    • endZ

      public final double endZ
      The end z-coordinate.
  • Constructor Details

    • LineSegment3d

      public LineSegment3d(double startX, double startY, double startZ, double endX, double endY, double endZ) throws DrawRuntimeException
      Construct a new LineSegment3d start six coordinates.
      Parameters:
      startX - double; the x-coordinate of the start point
      startY - double; the y-coordinate of the start point
      startZ - double; the z-coordinate of the start point
      endX - double; the x-coordinate of the end point
      endY - double; the y-coordinate of the end point
      endZ - double; the z-coordinate of the end point
      Throws:
      DrawRuntimeException - when (startX,startY) is equals end (endX,endY)
    • LineSegment3d

      public LineSegment3d(Point3d start, double endX, double endY, double endZ) throws NullPointerException, DrawRuntimeException
      Construct a new LineSegment3d start a Point3d and three coordinates.
      Parameters:
      start - Point3d; the start point
      endX - double; the x-coordinate of the end point
      endY - double; the y-coordinate of the end point
      endZ - double; the z-coordinate of the end point
      Throws:
      NullPointerException - when start is null
      DrawRuntimeException - when start has the exact coordinates endX, endY
    • LineSegment3d

      public LineSegment3d(double startX, double startY, double startZ, Point3d end) throws NullPointerException, DrawRuntimeException
      Construct a new LineSegment3d start three coordinates and a Point3d.
      Parameters:
      startX - double; the x-coordinate of the start point
      startY - double; the y-coordinate of the start point
      startZ - double; the z-coordinate of the start point
      end - Point3d; the end point
      Throws:
      NullPointerException - when end is null
      DrawRuntimeException - when end has the exact coordinates startX, startY
    • LineSegment3d

      public LineSegment3d(Point3d start, Point3d end) throws NullPointerException, DrawRuntimeException
      Construct a new LineSegment3d start two Point3d objects.
      Parameters:
      start - Point3d; the start point
      end - Point3d; the end point
      Throws:
      NullPointerException - when start is null
      DrawRuntimeException - when start has the exact coordinates endX, endY
  • Method Details

    • getStartPoint

      public Point3d getStartPoint()
      Get the start point of this LineSegment.
      Specified by:
      getStartPoint in interface LineSegment<Point3d,Ray3d>
      Returns:
      P; the start point of the LineSegment
    • getEndPoint

      public Point3d getEndPoint()
      Get the end point of this LineSegment.
      Specified by:
      getEndPoint in interface LineSegment<Point3d,Ray3d>
      Returns:
      P; the end point of the LineSegment
    • getLength

      public double getLength()
      Get the length (distance from start point to end point) of this LineSegment.
      Specified by:
      getLength in interface LineSegment<Point3d,Ray3d>
      Returns:
      double; (distance from start point to end point) of this LineSegment
    • getPoints

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

      public int size()
      Retrieve the number of points that make up the object.
      Specified by:
      size in interface Drawable<Point3d>
      Returns:
      int; the number of points that make up the object
    • getBounds

      public Bounds3d getBounds()
      Retrieve the bounding box of the object.
      Specified by:
      getBounds in interface Drawable3d
      Returns:
      Bounds3d; the bounding box of the object
    • project

      public LineSegment2d project() throws DrawRuntimeException
      Project the object onto the z=0 plane.
      Specified by:
      project in interface Drawable3d
      Returns:
      Drawable2d; the projected object
      Throws:
      DrawRuntimeException - when projecting onto the z=0 plane results in an invalid object. E.g. a Line3d that consists of points that all have the exact same x and y coordinates cannot be a line after projecting on the z=0 plane.
    • getLocationExtended

      public Ray3d getLocationExtended(double position) throws DrawRuntimeException
      Create a Ray on a specified point on this LineSegment.
      Specified by:
      getLocationExtended in interface LineSegment<Point3d,Ray3d>
      Parameters:
      position - double; the distance from the start point of this LineSegment.
      Returns:
      R; a ray beginning at the specified position
      Throws:
      DrawRuntimeException - when position is NaN or infinite
    • closestPointOnSegment

      public Point3d closestPointOnSegment(Point3d point)
      Project a Point on this LineSegment. If the the projected points lies outside the line segment, the nearest end point of the line segment is returned. Otherwise the returned point lies between the end points of the line segment.
      Adapted from example code provided by Paul Bourke.
      Specified by:
      closestPointOnSegment in interface LineSegment<Point3d,Ray3d>
      Parameters:
      point - P; the point to project onto the segment
      Returns:
      P; either the start point, or the end point of the segment or a Point that lies somewhere in between those two.
    • reverse

      public LineSegment3d reverse()
      Construct a new LineSegment with the points of this LineSegment in reverse order.
      Specified by:
      reverse in interface LineSegment<Point3d,Ray3d>
      Returns:
      LineSegment; the new LineSegment
    • projectOrthogonal

      public Point3d projectOrthogonal(Point3d point) throws NullPointerException
      Project a point onto this object. For PolyLines, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned. If there is no valid solution on the closest segment, null is returned.
      Specified by:
      projectOrthogonal in interface Project<Point3d>
      Parameters:
      point - P; the point
      Returns:
      P; the projection of the point (may be null if no sensible projection is possible). If the result is not null; the result lies somewhere on this object.
      Throws:
      NullPointerException - when point is null;
    • projectOrthogonalExtended

      public Point3d projectOrthogonalExtended(Point3d point) throws NullPointerException
      Project a point onto this object. For PolyLines, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned.
      Specified by:
      projectOrthogonalExtended in interface Project<Point3d>
      Parameters:
      point - P; the point
      Returns:
      P; the projection of the point. This result cannot be null, but it may not lie on this object, but, in stead, lie on a line, or plane that extends this object
      Throws:
      NullPointerException - when point is null;
    • projectOrthogonalFractional

      public double projectOrthogonalFractional(Point3d point) throws NullPointerException
      Project a point onto this object. For PolyLines, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned. If there is no valid solution on the closest segment, null is returned.
      Specified by:
      projectOrthogonalFractional in interface Project<Point3d>
      Parameters:
      point - P; the point
      Returns:
      double; the fractional position of the projection of the point (may be NaN if no sensible projection is possible). If the result is not null; the result lies somewhere on this object.
      Throws:
      NullPointerException - when point is null;
    • projectOrthogonalFractionalExtended

      public double projectOrthogonalFractionalExtended(Point3d point) throws NullPointerException
      Project a point onto this object. For PolyLines, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned.
      Specified by:
      projectOrthogonalFractionalExtended in interface Project<Point3d>
      Parameters:
      point - P; the point
      Returns:
      double; the fractional position of the projection of the point. This result cannot be NaN, but it may be outside the range 0.0 .. 1.0.
      Throws:
      NullPointerException - when point is null;
    • 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<Point3d>
      Overrides:
      toString in class Object
      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<Point3d>
      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
    • toExcel

      public String toExcel()
      Convert this PolyLine to something that MS-Excel can plot.
      Specified by:
      toExcel in interface LineSegment<Point3d,Ray3d>
      Returns:
      String MS-excel XY, or XYZ plottable output
    • hashCode

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

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