Package org.djutils.draw.line
Class Ray3d
java.lang.Object
org.djutils.draw.point.Point3d
org.djutils.draw.point.DirectedPoint3d
org.djutils.draw.line.Ray3d
- All Implemented Interfaces:
Serializable
,Directed<DirectedPoint3d>
,Directed3d<DirectedPoint3d>
,Drawable<Point3d>
,Drawable3d
,Project<Point3d>
,Ray<Ray3d,
,DirectedPoint3d, Point3d> Point<Point3d>
public class Ray3d
extends DirectedPoint3d
implements Drawable3d, Ray<Ray3d,DirectedPoint3d,Point3d>
Ray3d is a half-line; it has one end point with non-infinite coordinates; the other end point is infinitely far away.
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 Summary
Fields inherited from class org.djutils.draw.point.DirectedPoint3d
dirY, dirZ
-
Constructor Summary
ConstructorDescriptionRay3d
(double[] xyz, double[] orientation) Create a new Rayt3d from x, y, and z coordinates packed in a double array of three elements and a direction specified using a double array of two elements.Ray3d
(double[] xyz, double dirY, double dirZ) Create a new Ray3d from x, y, and z coordinates packed in a double array of three elements and direction dirY,dirZ.Ray3d
(double x, double y, double z, double[] orientation) Create a new Ray3d with x, y, and z coordinates and orientation specified using a double array of three elements (containing dirX,dirY,dirZ in that order).Ray3d
(double x, double y, double z, double dirY, double dirZ) Construct a new Ray3d.Ray3d
(double x, double y, double z, double throughX, double throughY, double throughZ) Construct a new Ray3d.Construct a new Ray3d.Ray3d
(DirectedPoint3d directedPoint) Construct a new Ray3d.Construct a new Ray3d.Construct a new Ray3d.Construct a new Ray3d. -
Method Summary
Modifier and TypeMethodDescriptionclosestPointOnRay
(Point3d point) Project a Point on a Ray.boolean
flip()
Flip the direction of the Ray (creates and returns a new Ray instance).Retrieve the bounding box of the object.final double
getDirY()
Retrieve the angle from the positive z axis to the direction.final double
getDirZ()
Retrieve the angle from the positive x-axis to the projection of the direction in the x-y-plane.Get the finite end point of this Ray.getLocationExtended
(double position) Get the location at a position on the line, with its direction.Retrieve, or generate all points that make up the object.int
hashCode()
neg()
Return a new Point with negated coordinate values.projectOrthogonal
(Point3d point) Project a point onto this object.projectOrthogonalExtended
(Point3d point) Project a point onto this object.double
Project a point onto this object.double
Project a point onto this object.int
size()
Retrieve the number of points that make up the object.toString()
Produce a string describing the Drawable using default conversion for the (double) coordinate values.Produce a String describing the Drawable.Methods inherited from class org.djutils.draw.point.DirectedPoint3d
abs, epsilonEquals, interpolate, normalize, rotate, rotate, scale, translate, translate
Methods inherited from class org.djutils.draw.point.Point3d
closestPointOnLine, closestPointOnLine, closestPointOnLine, closestPointOnSegment, closestPointOnSegment, distance, distanceSquared, epsilonEquals, fractionalPositionOnLine, getX, getY, getZ, interpolate, project
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.djutils.draw.Drawable
getPointList, toString, toString
Methods inherited from interface org.djutils.draw.Drawable3d
getDimensions, project
Methods inherited from interface org.djutils.draw.line.Ray
getLocation
-
Constructor Details
-
Ray3d
public Ray3d(double x, double y, double z, double dirY, double dirZ) throws IllegalArgumentException Construct a new Ray3d.- Parameters:
x
- double; the x coordinate of the finite end point of the rayy
- double; the y coordinate of the finite end point of the rayz
- double; the z coordinate of the finite end point of the raydirY
- double; the angle from the positive Z axis direction in radians (the complement of the slope)dirZ
- double; the angle from the positive X axis direction in radians- Throws:
IllegalArgumentException
- when dirY, or dirZ is NaN (should be impossible)
-
Ray3d
public Ray3d(double[] xyz, double dirY, double dirZ) throws NullPointerException, IllegalArgumentException Create a new Ray3d from x, y, and z coordinates packed in a double array of three elements and direction dirY,dirZ.- Parameters:
xyz
- double[]; the x, y and z coordinates in that orderdirY
- double; the angle from the positive Z axis direction in radians (the complement of the slope)dirZ
- double; the angle from the positive X axis direction in radians- Throws:
NullPointerException
- when xyx is nullIllegalArgumentException
- when the length of the xyz array is not 3, or contains a NaN value, or dirY, or dirZ is NaN
-
Ray3d
public Ray3d(Point3d point, double dirY, double dirZ) throws NullPointerException, IllegalArgumentException Construct a new Ray3d.- Parameters:
point
- Point3d; the finite end point of the raydirY
- double; the angle from the positive Z axis direction in radians (the complement of the slope)dirZ
- double; the angle from the positive X axis direction in radians- Throws:
NullPointerException
- when point is nullIllegalArgumentException
- when dirY, or dirZ is NaN
-
Ray3d
public Ray3d(double x, double y, double z, double throughX, double throughY, double throughZ) throws DrawRuntimeException Construct a new Ray3d.- Parameters:
x
- double; the x coordinate of the finite end point of the rayy
- double; the y coordinate of the finite end point of the rayz
- double; the z coordinate of the finite end point of the raythroughX
- double; the x coordinate of another point on the raythroughY
- double; the y coordinate of another point on the raythroughZ
- double; the z coordinate of another point on the ray- Throws:
DrawRuntimeException
- when throughX == x and throughY == y and throughZ == z, or any through-value is NaN
-
Ray3d
public Ray3d(Point3d point, double throughX, double throughY, double throughZ) throws NullPointerException, DrawRuntimeException Construct a new Ray3d.- Parameters:
point
- Point3d; the finite end point of the raythroughX
- double; the x coordinate of another point on the raythroughY
- double; the y coordinate of another point on the raythroughZ
- double; the z coordinate of another point on the ray- Throws:
NullPointerException
- when point is nullDrawRuntimeException
- when throughX == point.x and throughY == point.y and point.z == throughZ, or any through-value is NaN
-
Ray3d
public Ray3d(double x, double y, double z, double[] orientation) throws NullPointerException, IllegalArgumentException Create a new Ray3d with x, y, and z coordinates and orientation specified using a double array of three elements (containing dirX,dirY,dirZ in that order).- Parameters:
x
- double; the x coordinatey
- double; the y coordinatez
- double; the z coordinateorientation
- double[]; the two direction values in a double array containing dirY and dirZ in that order. DirY is the rotation from the positive z-axis to the direction. DirZ is the angle from the positive x-axis to the projection of the direction in the x-y-plane.- Throws:
NullPointerException
- whenorientation
is nullIllegalArgumentException
- when the length of thedirection
array is not 2, or contains a NaN value
-
Ray3d
public Ray3d(double[] xyz, double[] orientation) throws NullPointerException, IllegalArgumentException Create a new Rayt3d from x, y, and z coordinates packed in a double array of three elements and a direction specified using a double array of two elements.- Parameters:
xyz
- double[]; the x, y and z coordinates in that orderorientation
- double[]; the two orientation angles dirY and dirZ in that order- Throws:
NullPointerException
- when xyx or orientation is nullIllegalArgumentException
- when the length of the xyx array is not 3 or the length of the orientation array is not 2
-
Ray3d
public Ray3d(double x, double y, double z, Point3d throughPoint) throws NullPointerException, DrawRuntimeException Construct a new Ray3d.- Parameters:
x
- double; the x coordinate of the finite end point of the rayy
- double; the y coordinate of the finite end point of the rayz
- double; the z coordinate of the finite end point of the raythroughPoint
- Point3d; another point on the ray- Throws:
NullPointerException
- when throughPoint is nullDrawRuntimeException
- when throughPoint is exactly at (x, y)
-
Ray3d
Construct a new Ray3d.- Parameters:
point
- Point3d; the finite end point of the raythroughPoint
- Point3d; another point on the ray- Throws:
NullPointerException
- when point is null or throughPoint is nullDrawRuntimeException
- when throughPoint is exactly at point
-
Ray3d
Construct a new Ray3d.- Parameters:
directedPoint
- DirectedPoint3d; point and direction of the new Ray3d
-
-
Method Details
-
getDirY
public final double getDirY()Description copied from interface:Directed3d
Retrieve the angle from the positive z axis to the direction. Normally these are values between [0:π]. Angles less than π/2 indicate above the x-y-plane; positive slope, angles > π/2 indicate angles below this plane; negative slope.- Specified by:
getDirY
in interfaceDirected3d<DirectedPoint3d>
- Overrides:
getDirY
in classDirectedPoint3d
- Returns:
- double; dirY
-
getDirZ
public final double getDirZ()Description copied from interface:Directed3d
Retrieve the angle from the positive x-axis to the projection of the direction in the x-y-plane. Positive values rotate towards the positive y-axis (and beyond).- Specified by:
getDirZ
in interfaceDirected3d<DirectedPoint3d>
- Specified by:
getDirZ
in interfaceRay<Ray3d,
DirectedPoint3d, Point3d> - Overrides:
getDirZ
in classDirectedPoint3d
- Returns:
- double; dirZ
-
getEndPoint
Description copied from interface:Ray
Get the finite end point of this Ray.- Specified by:
getEndPoint
in interfaceRay<Ray3d,
DirectedPoint3d, Point3d> - Returns:
- P; the finite end point of this Ray
-
size
public int size()Description copied from interface:Drawable
Retrieve the number of points that make up the object. -
getPoints
Description copied from interface:Drawable
Retrieve, or generate all points that make up the object.- Specified by:
getPoints
in interfaceDrawable<Point3d>
- Overrides:
getPoints
in classDirectedPoint3d
- Returns:
- Iterable<Point2d>; an iterator that generates all points that make up the object
-
getBounds
Description copied from interface:Drawable3d
Retrieve the bounding box of the object.- Specified by:
getBounds
in interfaceDrawable3d
- Overrides:
getBounds
in classPoint3d
- Returns:
- Bounds3d; the bounding box of the object
-
neg
Description copied from interface:Point
Return a new Point with negated coordinate values. If this is a DirectedPoint, dirY and dirZ are negated.- Specified by:
neg
in interfaceDirected<DirectedPoint3d>
- Specified by:
neg
in interfacePoint<Point3d>
- Overrides:
neg
in classDirectedPoint3d
- Returns:
- Point; a new point with negated coordinate values
-
flip
Description copied from interface:Ray
Flip the direction of the Ray (creates and returns a new Ray instance).- Specified by:
flip
in interfaceRay<Ray3d,
DirectedPoint3d, Point3d> - Returns:
- R; Ray at the same location, but with dirZ (in case of a Ray3d) incremented by π and dirY subtracted from π
-
getLocationExtended
Description copied from interface:Ray
Get the location at a position on the line, with its direction. Position must be a finite value- Specified by:
getLocationExtended
in interfaceRay<Ray3d,
DirectedPoint3d, Point3d> - Parameters:
position
- double; the position on the line for which to calculate the point on the line- Returns:
- R; a ray with the same direction as this ray
- Throws:
DrawRuntimeException
- when position infinite, or NaN.
-
closestPointOnRay
Description copied from interface:Ray
Project a Point on a Ray. If the the projected points lies outside the ray, the start point of the ray is returned. Otherwise the closest point on the ray is returned.
Adapted from example code provided by Paul Bourke.- Specified by:
closestPointOnRay
in interfaceRay<Ray3d,
DirectedPoint3d, Point3d> - Parameters:
point
- P; the point to project onto the segment- Returns:
- D; either the start point, or DirectedPoint that lies somewhere on this Ray.
- Throws:
NullPointerException
- when point is null
-
projectOrthogonal
Description copied from interface:Project
Project a point onto this object. For PolyLines and Polygons, 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 interfaceProject<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
Description copied from interface:Project
Project a point onto this object. For PolyLines and Polygons, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned.- Specified by:
projectOrthogonalExtended
in interfaceProject<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
-
projectOrthogonalFractional
Description copied from interface:Project
Project a point onto this object. For PolyLines and Polygons, 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, NaN is returned.- Specified by:
projectOrthogonalFractional
in interfaceProject<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 NaN; the result lies somewhere on this object.
- Throws:
NullPointerException
- when point is null;
-
projectOrthogonalFractionalExtended
Description copied from interface:Project
Project a point onto this object. For PolyLines and Polygons, there may be multiple valid solutions. In that case the solution that lies on the closest segment is returned.- Specified by:
projectOrthogonalFractionalExtended
in interfaceProject<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
Description copied from interface:Drawable
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 interfaceDrawable<Point3d>
- Overrides:
toString
in classDirectedPoint3d
- Returns:
- String; a string describing the Drawable
-
toString
Description copied from interface:Drawable
Produce a String describing the Drawable.- Specified by:
toString
in interfaceDrawable<Point3d>
- Overrides:
toString
in classDirectedPoint3d
- 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
-
hashCode
public int hashCode()- Overrides:
hashCode
in classDirectedPoint3d
-
equals
- Overrides:
equals
in classDirectedPoint3d
-