net.algart.drawing3d Class CoordinateSystem3D

java.lang.Object net.algart.drawing3d.CoordinateSystem3D
All Implemented Interfaces:
java.lang.Cloneable

public final class CoordinateSystem3D
extends java.lang.Object
implements java.lang.Cloneable

Coordinate system in 3D space. Formally, it is a triplet of orthogonal vectors, named the basis, having the same length, named the scale σ, and originating in 3D space from the same point, named the origin O=(Ox,Oy,Oz).

The base vectors, divided by the scale σ, are named the orientation and represented by Orientation3D class: the triplet of orthonormal vectors (i, j, k). So, the basis consists of 3 vectors i, σj, σk), originating from O point.

The coordinates of the origin O, the scale σ and the orientation (i, j, k) are passed to the constructor and can be gotten and set or get at any time by the access methods. The scale σ cannot be zero or negative.

The main goal of this class is transforming coordinates of some point from this coordinate system to the simple coordinates and vice versa. Formally, this class defines:

1. the direct transform of some point P, having coordinates (x,y,z) in terms of the coordinate system, represented by this class — i.e. P = O + σ(xi+yj+zk) — to the coordinates in the basic coordinate system
x' = Ox + σ(xix+yjx+zkx),
y' = Oy + σ(xiy+yjy+zky),
z' = Oz + σ(xiz+yjz+zkz);
2. the inverse transform of the coordinates (x',y',z') of the point P, specified in terms of the basic coordinate system, to the coordinates (x,y,z) in terms of the coordinate system, represented by this class.

The direct transform is performed by

methods, the inverse transform is performed by

methods.

This class is not thread-safe, but is thread-compatible and can be synchronized manually if multithread access is necessary.

AlgART Laboratory 2010

Since:
JDK 1.5
Version:
1.0
Author:
Daniel Alievsky

Constructor Summary
Constructor and Description
CoordinateSystem3D()
Creates the trivial coordinate system: O=0=(0,0,0), σ=1.0, i vector is (1,0,0), j vector is (0,1,0), k vector is (0,0,1).
CoordinateSystem3D(double originX, double originY, double originZ, double scale, Orientation3D orientation)
Creates new coordinate system, fully specified by the arguments of the constructor.

Method Summary
Modifier and Type Method and Description
CoordinateSystem3D clone()
Returns the precise clone of this coordinate system.
Orientation3D getOrientation()
Returns the orientation: the orthonormal basis (i, j, k).
double getOriginX()
Returns x-coordinate of the origin Ox.
double getOriginY()
Returns y-coordinate of the origin Oy.
double getOriginZ()
Returns z-coordinate of the origin Oz.
double getScale()
Returns the scale σ.
double inverseTransformX(double x, double y, double z)
Returns the x-coordinate of the given point in terms of this coordinate system.
double inverseTransformY(double x, double y, double z)
Returns the y-coordinate of the given point in terms of this coordinate system.
double inverseTransformZ(double x, double y, double z)
Returns the z-coordinate of the given point in terms of this coordinate system.
void setOrientation(Orientation3D orientation)
Sets the new orientation: the orthonormal basis (i, j, k).
void setOrigin(double originX, double originY, double originZ)
Sets the new origin O.
void setScale(double scale)
Sets the scale σ.
java.lang.String toString()
Returns a brief string description of this object.
double transformX(double x, double y, double z)
Returns the x-coordinate of the point, which has the given coordinates in terms of this coordinate system.
double transformY(double x, double y, double z)
Returns the y-coordinate of the point, which has the given coordinates in terms of this coordinate system.
double transformZ(double x, double y, double z)
Returns the z-coordinate of the point, which has the given coordinates in terms of this coordinate system.

Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

Constructor Detail

CoordinateSystem3D

public CoordinateSystem3D()
Creates the trivial coordinate system: O=0=(0,0,0), σ=1.0, i vector is (1,0,0), j vector is (0,1,0), k vector is (0,0,1).

CoordinateSystem3D

public CoordinateSystem3D(double originX,
double originY,
double originZ,
double scale,
Orientation3D orientation)
Creates new coordinate system, fully specified by the arguments of the constructor.

Parameters:
originX - x-coordinate of the origin Ox.
originY - y-coordinate of the origin Oy.
originZ - z-coordinate of the origin Oz.
scale - the scale σ.
orientation - the orientation (i, j, k).
Throws:
java.lang.NullPointerException - if orientation argument if null.
java.lang.IllegalArgumentException - if scale<=0.0.
Method Detail

getOriginX

public double getOriginX()
Returns x-coordinate of the origin Ox.

Returns:
x-coordinate of the origin Ox.

getOriginY

public double getOriginY()
Returns y-coordinate of the origin Oy.

Returns:
y-coordinate of the origin Oy.

getOriginZ

public double getOriginZ()
Returns z-coordinate of the origin Oz.

Returns:
z-coordinate of the origin Oz.

setOrigin

public void setOrigin(double originX,
double originY,
double originZ)
Sets the new origin O.

Parameters:
originX - x-coordinate of the new origin Ox.
originY - y-coordinate of the new origin Oy.
originZ - z-coordinate of the new origin Oz.

getScale

public double getScale()
Returns the scale σ.

Returns:
the scale σ.

setScale

public void setScale(double scale)
Sets the scale σ.

Parameters:
scale - the new scale σ.
Throws:
java.lang.IllegalArgumentException - if scale<=0.0.

getOrientation

public Orientation3D getOrientation()
Returns the orientation: the orthonormal basis (i, j, k).

Returns:
the orientation.

setOrientation

public void setOrientation(Orientation3D orientation)
Sets the new orientation: the orthonormal basis (i, j, k).

Parameters:
orientation - the new orientation.

transformX

public double transformX(double x,
double y,
double z)
Returns the x-coordinate of the point, which has the given coordinates in terms of this coordinate system. In other words, returns x' = Ox + σ(xix+yjx+zkx), where x,y,z are the arguments of this method.

Parameters:
x - the x-coordinate in terms of the coordinate system, represented by this class.
y - the y-coordinate in terms of the coordinate system, represented by this class.
z - the z-coordinate in terms of the coordinate system, represented by this class.
Returns:
the x-coordinate of this point in terms of the basic coordinate system.

transformY

public double transformY(double x,
double y,
double z)
Returns the y-coordinate of the point, which has the given coordinates in terms of this coordinate system. In other words, returns y' = Oy + σ(xiy+yjy+zky), where x,y,z are the arguments of this method.

Parameters:
x - the x-coordinate in terms of the coordinate system, represented by this class.
y - the y-coordinate in terms of the coordinate system, represented by this class.
z - the z-coordinate in terms of the coordinate system, represented by this class.
Returns:
the y-coordinate of this point in terms of the basic coordinate system.

transformZ

public double transformZ(double x,
double y,
double z)
Returns the z-coordinate of the point, which has the given coordinates in terms of this coordinate system. In other words, returns z' = Oz + σ(xiz+yjz+zkz), where x,y,z are the arguments of this method.

Parameters:
x - the x-coordinate in terms of the coordinate system, represented by this class.
y - the y-coordinate in terms of the coordinate system, represented by this class.
z - the z-coordinate in terms of the coordinate system, represented by this class.
Returns:
the z-coordinate of this point in terms of the basic coordinate system.

inverseTransformX

public double inverseTransformX(double x,
double y,
double z)
Returns the x-coordinate of the given point in terms of this coordinate system. In other words, returns x = ((x'−Ox)ix + (y'−Oy)iy + (z'−Oz)iz) / σ, where x',y',z' are the arguments of this method.

Parameters:
x - the x-coordinate of some point.
y - the y-coordinate of some point.
z - the z-coordinate of some point.
Returns:
the x-coordinate of this point in terms of the coordinate system, represented by this class.

inverseTransformY

public double inverseTransformY(double x,
double y,
double z)
Returns the y-coordinate of the given point in terms of this coordinate system. In other words, returns y = ((x'−Ox)jx + (y'−Oy)jy + (z'−Oz)jz) / σ, where x',y',z' are the arguments of this method.

Parameters:
x - the x-coordinate of some point.
y - the y-coordinate of some point.
z - the z-coordinate of some point.
Returns:
the y-coordinate of this point in terms of the coordinate system, represented by this class.

inverseTransformZ

public double inverseTransformZ(double x,
double y,
double z)
Returns the z-coordinate of the given point in terms of this coordinate system. In other words, returns z = ((x'−Ox)kx + (y'−Oy)ky + (z'−Oz)kz) / σ, where x',y',z' are the arguments of this method.

Parameters:
x - the x-coordinate of some point.
y - the y-coordinate of some point.
z - the z-coordinate of some point.
Returns:
the z-coordinate of this point in terms of the coordinate system, represented by this class.

clone

public CoordinateSystem3D clone()
Returns the precise clone of this coordinate system.

Overrides:
clone in class java.lang.Object
Returns:
the precise clone of this coordinate system.

toString

public java.lang.String toString()
Returns a brief string description of this object.

The result of this method may depend on implementation.

Overrides:
toString in class java.lang.Object
Returns:
a brief string description of this object.