Package org.djutils.draw.point
Class OrientedPoint3d
- java.lang.Object
-
- org.djutils.draw.point.Point3d
-
- org.djutils.draw.point.OrientedPoint3d
-
- All Implemented Interfaces:
Serializable,Drawable<Point3d,Space3d>,Drawable3d,Oriented<OrientedPoint3d>,Oriented3d<OrientedPoint3d>,Point<Point3d,Space3d>
public class OrientedPoint3d extends Point3d implements Oriented3d<OrientedPoint3d>
A OrientedPoint3d is an immutable directed point with an x, y, and z coordinate, stored with double precision. It differs from many Point implementations by being immutable. The direction is a vector from the point, where its direction is specified by the rotation around the x, y, and z-axis. A number of constructors and methods are provided for cases where only the rotation around the z-axis is of importance.Copyright (c) 2020-2021 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:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description OrientedPoint3d(double[] xyz)Create an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.OrientedPoint3d(double[] xyz, double[] direction)Create an immutable point with x, y, and z coordinates, stored with double precision, and direction.OrientedPoint3d(double[] xyz, double dirX, double dirY, double dirZ)Create an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.OrientedPoint3d(double x, double y, double z)Create an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.OrientedPoint3d(double x, double y, double z, double[] direction)Create an immutable point with x, y, and z coordinates, stored with double precision, and direction.OrientedPoint3d(double x, double y, double z, double dirX, double dirY, double dirZ)Create an immutable directed point with x, y, and z coordinates, stored with double precision and direction.OrientedPoint3d(Point3d point, double dirX, double dirY, double dirZ)Create an immutable directed point from another point, stored with double precision and specified direction.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description OrientedPoint3dabs()Return a new Point with absolute coordinate values.booleanepsilonEquals(OrientedPoint3d other, double epsilonCoordinate, double epsilonRotation)Compare this Oriented with another Oriented with specified tolerances in the coordinates and the angles.booleanequals(Object obj)doublegetDirX()Return the rotation around the x-axis in radians.doublegetDirY()Return the rotation around the y-axis in radians.doublegetDirZ()Return the rotation around the z-axis in radians.Iterator<OrientedPoint3d>getPoints()Retrieve, or generate all points that make up the object.inthashCode()OrientedPoint3dinterpolate(OrientedPoint3d otherPoint, double fraction)Interpolate towards another Point with a fraction.OrientedPoint3dneg()Return a new Point with negated coordinate values.OrientedPoint3dnormalize()Return a new Point with a distance of 1 to the origin.OrientedPoint3drotate(double rotateZ)Return a new OrientedPoint with an in-place rotation around the z-axis by the provided delta.OrientedPoint3drotate(double rotateX, double rotateY, double rotateZ)Return a new OrientedPoint3d point with an in-place rotation by the provided rotateX, rotateY, and rotateZ.OrientedPoint3dscale(double factor)Return a new Point with the coordinates of this point scaled by the provided factor.StringtoString()Produce a string describing the Drawable using default conversion for the (double) coordinate values.StringtoString(String doubleFormat, boolean doNotIncludeClassName)Produce a String describing the Drawable.OrientedPoint3dtranslate(double dx, double dy)Return a new Point with a translation by the provided dx and dy.OrientedPoint3dtranslate(double dx, double dy, double dz)Return a new Point3d with a translation by the provided dx, dy and dz.-
Methods inherited from class org.djutils.draw.point.Point3d
closestPointOnLine, closestPointOnLine, closestPointOnLine, closestPointOnSegment, closestPointOnSegment, distance, distanceSquared, epsilonEquals, fractionalPositionOnLine, getBounds, getX, getY, getZ, horizontalDirection, horizontalDirection, horizontalDistance, horizontalDistanceSquared, interpolate, project, size, verticalDirection
-
-
-
-
Constructor Detail
-
OrientedPoint3d
public OrientedPoint3d(double x, double y, double z) throws IllegalArgumentExceptionCreate an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.- Parameters:
x- double; the x coordinatey- double; the y coordinatez- double; the z coordinate- Throws:
IllegalArgumentException- when x, y, or z is NaN
-
OrientedPoint3d
public OrientedPoint3d(double x, double y, double z, double dirX, double dirY, double dirZ) throws IllegalArgumentExceptionCreate an immutable directed point with x, y, and z coordinates, stored with double precision and direction.- Parameters:
x- double; the x coordinatey- double; the y coordinatez- double; the z coordinatedirX- double; the direction as rotation around the x-axis with the point as the centerdirY- double; the direction as rotation around the y-axis with the point as the centerdirZ- double; the direction as rotation around the z-axis with the point as the center- Throws:
IllegalArgumentException- when x, y, z, dirX, dirY, or dirZ is NaN
-
OrientedPoint3d
public OrientedPoint3d(double[] xyz) throws NullPointerException, IllegalArgumentExceptionCreate an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.- Parameters:
xyz- double[]; the x, y and z coordinates- Throws:
NullPointerException- when xyx is nullIllegalArgumentException- when the length of the xyx array is not 3, or contains a NaN value, or dirX, dirY, or dirZ is NaN
-
OrientedPoint3d
public OrientedPoint3d(double[] xyz, double dirX, double dirY, double dirZ) throws NullPointerException, IllegalArgumentExceptionCreate an immutable directed point with x, y, and z coordinates, stored with double precision, and direction 0,0,0.- Parameters:
xyz- double[]; the x, y and z coordinatesdirX- double; the direction as rotation around the x-axis with the point as the centerdirY- double; the direction as rotation around the y-axis with the point as the centerdirZ- double; the direction as rotation around the z-axis with the point as the center- Throws:
NullPointerException- when xyx is nullIllegalArgumentException- when the length of the xyx array is not 3, or contains a NaN value, or dirX, dirY, or dirZ is NaN
-
OrientedPoint3d
public OrientedPoint3d(Point3d point, double dirX, double dirY, double dirZ) throws IllegalArgumentException
Create an immutable directed point from another point, stored with double precision and specified direction.- Parameters:
point- Point3d; the point from which this OrientedPoint3d will be instantiateddirX- double; the direction as rotation around the x-axis with the point as the centerdirY- double; the direction as rotation around the y-axis with the point as the centerdirZ- double; the direction as rotation around the z-axis with the point as the center- Throws:
IllegalArgumentException- when dirX, dirY, or dirZ is NaN
-
OrientedPoint3d
public OrientedPoint3d(double x, double y, double z, double[] direction) throws NullPointerException, IllegalArgumentExceptionCreate an immutable point with x, y, and z coordinates, stored with double precision, and direction.- Parameters:
x- double; the x coordinatey- double; the y coordinatez- double; the z coordinatedirection- double[]; the direction as rotations around the x,y,z-axes with the point as the center- Throws:
NullPointerException- whenrotationis nullIllegalArgumentException- when the length of thedirectionarray is not 3
-
OrientedPoint3d
public OrientedPoint3d(double[] xyz, double[] direction) throws NullPointerException, IllegalArgumentExceptionCreate an immutable point with x, y, and z coordinates, stored with double precision, and direction.- Parameters:
xyz- double[]; the x, y and z coordinatesdirection- double[]; the rotation around the x,y,z-axis with the point as the center- Throws:
NullPointerException- when xyx or direction is nullIllegalArgumentException- when the length of the xyx array or the length of the direction array is not 3
-
-
Method Detail
-
translate
public OrientedPoint3d translate(double dx, double dy) throws IllegalArgumentException
Return a new Point with a translation by the provided dx and dy.- Overrides:
translatein classPoint3d- Parameters:
dx- double; the horizontal translationdy- double; the vertical translation- Returns:
- Point3D; a new point with the translated coordinates
- Throws:
IllegalArgumentException- when dx, or dy is NaN
-
translate
public OrientedPoint3d translate(double dx, double dy, double dz) throws IllegalArgumentException
Return a new Point3d with a translation by the provided dx, dy and dz.- Overrides:
translatein classPoint3d- Parameters:
dx- double; the x translationdy- double; the y translationdz- double; the z translation- Returns:
- Point3d; a new point with the translated coordinates
- Throws:
IllegalArgumentException- when dx, dy, or dz is NaN
-
scale
public OrientedPoint3d scale(double factor) throws IllegalArgumentException
Return a new Point with the coordinates of this point scaled by the provided factor.
-
neg
public OrientedPoint3d neg()
Return a new Point with negated coordinate values.
-
abs
public OrientedPoint3d abs()
Return a new Point with absolute coordinate values.
-
normalize
public OrientedPoint3d normalize() throws DrawRuntimeException
Return a new Point with a distance of 1 to the origin.
-
interpolate
public OrientedPoint3d interpolate(OrientedPoint3d 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. DirX, dirY and dirZ are interpolated using the interpolateShortest method.- Parameters:
otherPoint- OrientedPoint3d; the other pointfraction- 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. Iffractionis 0;thisPoint is returned; iffractionis 1, the otherpointis returned- Returns:
- OrientedPoint3d; a new OrientedPoint3d at the requested fraction
- Throws:
NullPointerException- when otherPoint is nullIllegalArgumentException- when fraction is NaN
-
rotate
public OrientedPoint3d rotate(double rotateZ) throws IllegalArgumentException
Return a new OrientedPoint with an in-place rotation around the z-axis by the provided delta. The resulting rotation will be normalized between -π and π.- Parameters:
rotateZ- double; the rotation around the z-axis- Returns:
- OrientedPoint3d; a new point with the same coordinates, dirX and dirY and modified dirZ
- Throws:
IllegalArgumentException- when rotateZ is NaN
-
rotate
public OrientedPoint3d rotate(double rotateX, double rotateY, double rotateZ) throws IllegalArgumentException
Return a new OrientedPoint3d point with an in-place rotation by the provided rotateX, rotateY, and rotateZ. The resulting rotations will be normalized between -π and π.- Parameters:
rotateX- double; the rotation around the x-axisrotateY- double; the rotation around the y-axisrotateZ- double; the rotation around the z-axis- Returns:
- OrientedPoint3d; a new point with the same coordinates and applied rotations
- Throws:
IllegalArgumentException- when any of the rotations is NaN
-
getDirX
public double getDirX()
Return the rotation around the x-axis in radians.- Specified by:
getDirXin interfaceOriented3d<OrientedPoint3d>- Returns:
- double; the rotation around the x-axis in radians
-
getDirY
public double getDirY()
Return the rotation around the y-axis in radians.- Specified by:
getDirYin interfaceOriented3d<OrientedPoint3d>- Returns:
- double; the rotation around the y-axis in radians
-
getDirZ
public double getDirZ()
Return the rotation around the z-axis in radians.- Specified by:
getDirZin interfaceOriented<OrientedPoint3d>- Returns:
- double; the rotation around the z-axis in radians
-
getPoints
public Iterator<OrientedPoint3d> getPoints()
Retrieve, or generate 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.
-
toString
public String toString(String doubleFormat, boolean doNotIncludeClassName)
Produce a String describing the Drawable.- Specified by:
toStringin interfaceDrawable<Point3d,Space3d>- Overrides:
toStringin classPoint3d- 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(OrientedPoint3d 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:
epsilonEqualsin interfaceOriented<OrientedPoint3d>- Parameters:
other- O; the point to compare withepsilonCoordinate- double; the upper bound of difference for one of the coordinates; use Double.POSITIVE_INFINITY if you do not want to check the coordinatesepsilonRotation- 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 point is nullIllegalArgumentException- epsilonCoordinate or epsilonRotation is NaN or negative
-
-