|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectde.jreality.math.Pn
public class Pn
A set of static methods related to real n-dimensional real projective space RPn.
In general, points and vectors are represented in homogeneous coordinates by arrays of length n+1.
By duality, hyperplanes are represented in the same fashion. The last coordinate is considered
to be the homogeneous coordinate (see for example dehomogenize(double[], double[])).
In addition to purely projective methods, this includes a number of methods related to the classical homogeneous metric spaces (euclidean, hyperbolic, and elliptic) which are based on a projective model for these spaces.
The methods related to metric geometries generally have a final argument
which identifies the geometry. This can be one of the 3 pre-defined values
HYPERBOLIC, EUCLIDEAN or ELLIPTIC. These correspond to
spaces of constant negative, null, and positive curvature, resp.
(For the mathematical basis of the derivation of metric geometries from projective geometry -- which forms the foundation the functionality of this class -- see H.M.S. Coxeter, Non-Euclidean Geometry, 1965.)
Note: there may appear to be some duplication of functionality with methods in Rn. However,
the methods here expect points to be specified with homogeneous coordinates, while those in Rn expect dehomogenized
coordinates (in general -- but see Rn for exceptions), so there is
usually only one correct choice for which method to use. But see normalize(double[], double[], int)
for an example of some finer points.
See also Rn for more on method conventions.
See also P2 and P3 for
methods specific to two- and three-dimensional real projective geometry.
| Field Summary | |
|---|---|
static int |
ELLIPTIC
|
static int |
EUCLIDEAN
|
static int |
HYPERBOLIC
|
static int |
PROJECTIVE
|
static double[] |
zDirectionP3
|
| Method Summary | |
|---|---|
static double |
acosh(double x)
|
static double |
angleBetween(double[] u,
double[] v,
int metric)
Calculate the angle between the points u and v with respect to the metric metric. |
static double |
asinh(double x)
|
static double |
atanh(double x)
|
static double[][] |
calculateBounds(double[][] bounds,
double[][] vlist)
Like the method calculateBounds in class Rn,
but dehomogenizes the points before computing the bound. |
static double[] |
centroid(double[] average,
double[][] points,
int metric)
Calculate the centroid of points with respect to metric. |
static double |
coordForDistance(double d,
int metric)
Return the value z so that the point (0,0,z,1) lies a distance d from the origin (0,0,0,1) in the given metric. |
static double |
cosh(double x)
These hyperbolic trig functions fill in a gap in the Java math library! |
static double[][] |
dehomogenize(double[][] dst,
double[][] src)
A vectorized version of dehomogenize(double[], double[]). |
static double[] |
dehomogenize(double[] dst,
double[] src)
Dehomogenize the src array into the dst array. |
static double |
distanceBetween(double[] u,
double[] v,
int metric)
Calculate the distance between the two points u and v. |
static double[] |
dragTangentVector(double[] dst,
double[] ddir,
double[] src,
double[] sdir,
double length,
int metric)
Drag a tangent vector sdir based at point src with initial direction given by sdir, a distance of length in the given metric. |
static double[] |
dragTangentVector(double[] dstTangent,
double[] sourcePoint,
double[] sourceTangent,
double[] dstPoint,
int metric)
Drag the tangent vector sourceTangent based at sourcePoint to a tangent vector based at dstPoint. |
static double[] |
dragTowards(double[] result,
double[] p0,
double[] p1,
double length,
int metric)
Calculate the point lying a distance length from p0 in the direction p1. |
static double[][] |
homogenize(double[][] dst,
double[][] src)
A vector version of homogenize(double[], double[]). |
static double[] |
homogenize(double[] dst,
double[] src)
Extend the coordinates of src by appending 1.0 |
static double |
innerProduct(double[] dst,
double[] src,
int metric)
Returns the inner product of the two vectors for the given metric. |
static double |
innerProductPlanes(double[] dst,
double[] src,
int metric)
The euclidean metric is not completely self-dual so we need a special method to calculate inner product of planes |
static double |
innerProductPoints(double[] dst,
double[] src,
int metric)
An alias for innerProduct(double[], double[], int). |
static boolean |
isValidCoordinate(double[] transVec,
int dim,
int metric)
|
static double[] |
linearInterpolation(double[] dst,
double[] u,
double[] v,
double t,
int metric)
Linear interpolate respecting the given metric metric. |
static double[] |
makeFlattenProjection(double[] dst,
double[] center,
double[] axis)
Similar to P3#makeHarmonicHarmology(double[], double[], double[]) but maps all points
onto the axis plane. |
static double[] |
makeGeneralizedProjection(double[] dst,
double[] center,
double[] axis,
double val)
Create a projectivity that leaves center C invariant (planewise), axis A invariant (point-wise) and otherwise moves a general point P along the line l through P and the center depending on val. |
static double[] |
makeHarmonicHarmology(double[] dst,
double[] center,
double[] axis)
Construct a central projectivity with fixed point center and fixed plane axis. |
static double[] |
midPlane(double[] midp,
double[] pl1,
double[] pl2,
int metric)
Find the plane which lies, metrically, half-way between the two given planes. |
static double |
norm(double[] src,
int metric)
Calculates the norm of the vector in the given metric metric. |
static double[][] |
normalize(double[][] dst,
double[][] src,
int metric)
A vectorized version of normalize(double[], double[], int). |
static double[] |
normalize(double[] dst,
double[] dvec,
double[] src,
double[] svec,
int metric)
Normalize a point-tangent pair (src, svec) so that both members have unit length and, the tangent vector lies in the polar plane of the point. |
static double[] |
normalize(double[] dst,
double[] src,
int metric)
Normalizes the vector src to have unit length (either 1 or i), or, if metric is EUCLIDEAN, then the input vector is dehomogenized. |
static double[] |
normalizePlane(double[] dst,
double[] src,
int metric)
For the euclidean special case: Normalize a hyper-plane (represented as a vector of length n) so that the direction vector (the first n-1 coordinates) has euclidean length 1 but represents the same projective hyper-plane. |
static double[] |
normalizePoint(double[] dst,
double[] src,
int metric)
An alias for normalize(double[], double[], int). |
static double |
normSquared(double[] src,
int metric)
|
static double[][] |
polarize(double[][] polar,
double[][] p,
int metric)
A vectorized version of polarize(double[], double[], int). |
static double[] |
polarize(double[] polar,
double[] p,
int metric)
Polarize the input element p with respect to the quadradic form associated to metric. |
static double[] |
polarizePlane(double[] dst,
double[] plane,
int metric)
This just calls polarize(double[], double[], int) since the polar plane of
a point is just Q.point, where Q is the absolute quadric |
static double[] |
polarizePoint(double[] dst,
double[] point,
int metric)
This has to handle the exception euclidean case, that the polar of any point is the ideal plane. |
static double[] |
projectOnto(double[] result,
double[] master,
double[] victim,
int metric)
Determine the projection of the point victim onto the point master. |
static double[] |
projectOntoComplement(double[] result,
double[] master,
double[] victim,
int metric)
Project victim onto the othogonal complement of master (all with respect to the given metric). |
static double[] |
projectToTangentSpace(double[] result,
double[] point,
double[] tangentToBe,
int metric)
|
static double[][] |
setToLength(double[][] dst,
double[][] src,
double d,
int metric)
A vectorized version of setToLength(double[], double[], double, int). |
static double[] |
setToLength(double[] dst,
double[] src,
double length,
int metric)
Create a multiple of src with has length length. |
static double |
sinh(double x)
|
static double |
tanh(double x)
|
| Methods inherited from class java.lang.Object |
|---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| Field Detail |
|---|
public static final int ELLIPTIC
public static final int EUCLIDEAN
public static final int HYPERBOLIC
public static final int PROJECTIVE
public static double[] zDirectionP3
| Method Detail |
|---|
public static double cosh(double x)
arg -
public static double sinh(double x)
public static double tanh(double x)
public static double acosh(double x)
public static double asinh(double x)
public static double atanh(double x)
public static double angleBetween(double[] u,
double[] v,
int metric)
u - v - metric -
public static double[][] calculateBounds(double[][] bounds,
double[][] vlist)
calculateBounds in class Rn,
but dehomogenizes the points before computing the bound.
bounds - double[2][3]vlist - double[][3] or double[][4]
public static double[] centroid(double[] average,
double[][] points,
int metric)
average - points - metric -
public static double[] dehomogenize(double[] dst,
double[] src)
dst - src -
public static double coordForDistance(double d,
int metric)
d - metric -
public static double[][] dehomogenize(double[][] dst,
double[][] src)
dehomogenize(double[], double[]).
dst - src -
public static double distanceBetween(double[] u,
double[] v,
int metric)
u - v - metric -
public static double[] dragTangentVector(double[] dst,
double[] ddir,
double[] src,
double[] sdir,
double length,
int metric)
normalize(double[], double[], double[], double[], int)
to perform this normalization before calling this method.
dst - ddir - src - sdir - length - metric -
public static double[] dragTangentVector(double[] dstTangent,
double[] sourcePoint,
double[] sourceTangent,
double[] dstPoint,
int metric)
ds - ds2 - ds3 - ds4 - metric - #dragTangentVector(double[], double[], double[], double, int)
public static double[] dragTowards(double[] result,
double[] p0,
double[] p1,
double length,
int metric)
result - p0 - p1 - length - metric -
public static double[] homogenize(double[] dst,
double[] src)
dst - src -
public static double[][] homogenize(double[][] dst,
double[][] src)
homogenize(double[], double[]).
dst - src -
public static double innerProduct(double[] dst,
double[] src,
int metric)
dst - src - metric -
public static double innerProductPlanes(double[] dst,
double[] src,
int metric)
dst - src - metric -
public static double innerProductPoints(double[] dst,
double[] src,
int metric)
innerProduct(double[], double[], int).
dst - src - metric -
public static boolean isValidCoordinate(double[] transVec,
int dim,
int metric)
public static double[] linearInterpolation(double[] dst,
double[] u,
double[] v,
double t,
int metric)
dst - u - v - t - metric -
Rn.linearCombination(double[], double, double[], double, double[]).
public static double[] makeHarmonicHarmology(double[] dst,
double[] center,
double[] axis)
dst - center - axis - metric -
public static double[] makeFlattenProjection(double[] dst,
double[] center,
double[] axis)
P3#makeHarmonicHarmology(double[], double[], double[]) but maps all points
onto the axis plane.
dst - center - axis -
public static double[] makeGeneralizedProjection(double[] dst,
double[] center,
double[] axis,
double val)
dst - center - axis - val -
public static double[] midPlane(double[] midp,
double[] pl1,
double[] pl2,
int metric)
midp - pl1 - pl2 - metric -
public static double norm(double[] src,
int metric)
src - metric -
public static double[] normalize(double[] dst,
double[] dvec,
double[] src,
double[] svec,
int metric)
dst - dvec - src - svec - metric -
public static double[] normalize(double[] dst,
double[] src,
int metric)
setToLength(double[], double[], double, int).
This method is only
valid for homogeneous coordinates. Use {@link de.jreality.math.Rn#normalize(double[], double[])
if you are using dehomogenous coordinates (e.g., representing points in R3 using 3-vectors). \
dst - src - metric -
public static double[][] normalize(double[][] dst,
double[][] src,
int metric)
normalize(double[], double[], int).
dst - src - metric -
public static double[] normalizePlane(double[] dst,
double[] src,
int metric)
dst - src -
public static double[] normalizePoint(double[] dst,
double[] src,
int metric)
normalize(double[], double[], int).
dst - src - metric -
public static double normSquared(double[] src,
int metric)
src - metric -
public static double[] polarize(double[] polar,
double[] p,
int metric)
polarizePlane(double[], double[], int) or
polarizePlane(double[], double[], int).
polar - p - metric -
public static double[][] polarize(double[][] polar,
double[][] p,
int metric)
polarize(double[], double[], int).
polar - p - metric -
public static double[] polarizePlane(double[] dst,
double[] plane,
int metric)
polarize(double[], double[], int) since the polar plane of
a point is just Q.point, where Q is the absolute quadric
dst - ds - metric -
public static double[] polarizePoint(double[] dst,
double[] point,
int metric)
polarize(double[], double[], int).
object - ds - metric -
public static double[] projectOnto(double[] result,
double[] master,
double[] victim,
int metric)
result - master - victim - metric -
public static double[] projectOntoComplement(double[] result,
double[] master,
double[] victim,
int metric)
projectOnto(double[], double[], double[], int).
result - master - victim - metric -
public static double[] projectToTangentSpace(double[] result,
double[] point,
double[] tangentToBe,
int metric)
result - point - tangentToBe - metric -
public static double[] setToLength(double[] dst,
double[] src,
double length,
int metric)
dst - src - length - metric -
public static double[][] setToLength(double[][] dst,
double[][] src,
double d,
int metric)
setToLength(double[], double[], double, int).
verts - verts2 - d - euclidean2 -
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||