Class SphericalCoordinates
- All Implemented Interfaces:
Serializable
The conventions used here are the mathematical ones, i.e. spherical coordinates are related to Cartesian coordinates as follows:
- x = r cos(θ) sin(Φ)
- y = r sin(θ) sin(Φ)
- z = r cos(Φ)
- r = √(x2+y2+z2)
- θ = atan2(y, x)
- Φ = acos(z/r)
r is the radius, θ is the azimuthal angle in the x-y plane and Φ is the polar (co-latitude) angle. These conventions are different from the conventions used in physics (and in particular in spherical harmonics) where the meanings of θ and Φ are reversed.
This class provides conversion of coordinates and also of gradient and Hessian between spherical and Cartesian coordinates.
- Since:
- 3.2
- See Also:
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate static classInternal class used only for serialization. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate double[][]Jacobian of (r, θ invalid input: '&Phi').private final doublePolar angle (co-latitude) Φ.private double[][]Hessian of polar (co-latitude) angle Φ.private final doubleRadius.private double[][]Hessian of radius.private static final longSerializable UID.private final doubleAzimuthal angle in the x-y plane θ.private double[][]Hessian of azimuthal angle in the x-y plane θ.private final Vector3DCartesian coordinates. -
Constructor Summary
ConstructorsConstructorDescriptionSphericalCoordinates(double r, double theta, double phi) Build a spherical coordinates transformer from spherical coordinates.Build a spherical coordinates transformer from Cartesian coordinates. -
Method Summary
Modifier and TypeMethodDescriptionprivate voidLazy evaluation of Hessians.private voidLazy evaluation of (r, θ, φ) Jacobian.Get the Cartesian coordinates.doublegetPhi()Get the polar (co-latitude) angle.doublegetR()Get the radius.doublegetTheta()Get the azimuthal angle in x-y plane.double[]toCartesianGradient(double[] sGradient) Convert a gradient with respect to spherical coordinates into a gradient with respect to Cartesian coordinates.double[][]toCartesianHessian(double[][] sHessian, double[] sGradient) Convert a Hessian with respect to spherical coordinates into a Hessian with respect to Cartesian coordinates.private ObjectReplace the instance with a data transfer object for serialization.
-
Field Details
-
serialVersionUID
private static final long serialVersionUIDSerializable UID.- See Also:
-
v
Cartesian coordinates. -
r
private final double rRadius. -
theta
private final double thetaAzimuthal angle in the x-y plane θ. -
phi
private final double phiPolar angle (co-latitude) Φ. -
jacobian
private double[][] jacobianJacobian of (r, θ invalid input: '&Phi'). -
rHessian
private double[][] rHessianHessian of radius. -
thetaHessian
private double[][] thetaHessianHessian of azimuthal angle in the x-y plane θ. -
phiHessian
private double[][] phiHessianHessian of polar (co-latitude) angle Φ.
-
-
Constructor Details
-
SphericalCoordinates
Build a spherical coordinates transformer from Cartesian coordinates.- Parameters:
v- Cartesian coordinates
-
SphericalCoordinates
public SphericalCoordinates(double r, double theta, double phi) Build a spherical coordinates transformer from spherical coordinates.- Parameters:
r- radiustheta- azimuthal angle in x-y planephi- polar (co-latitude) angle
-
-
Method Details
-
getCartesian
-
getR
public double getR()Get the radius.- Returns:
- radius r
- See Also:
-
getTheta
public double getTheta()Get the azimuthal angle in x-y plane.- Returns:
- azimuthal angle in x-y plane θ
- See Also:
-
getPhi
public double getPhi()Get the polar (co-latitude) angle.- Returns:
- polar (co-latitude) angle Φ
- See Also:
-
toCartesianGradient
public double[] toCartesianGradient(double[] sGradient) Convert a gradient with respect to spherical coordinates into a gradient with respect to Cartesian coordinates.- Parameters:
sGradient- gradient with respect to spherical coordinates {df/dr, df/dθ, df/dΦ}- Returns:
- gradient with respect to Cartesian coordinates {df/dx, df/dy, df/dz}
-
toCartesianHessian
public double[][] toCartesianHessian(double[][] sHessian, double[] sGradient) Convert a Hessian with respect to spherical coordinates into a Hessian with respect to Cartesian coordinates.As Hessian are always symmetric, we use only the lower left part of the provided spherical Hessian, so the upper part may not be initialized. However, we still do fill up the complete array we create, with guaranteed symmetry.
- Parameters:
sHessian- Hessian with respect to spherical coordinates {{d2f/dr2, d2f/drdθ, d2f/drdΦ}, {d2f/drdθ, d2f/dθ2, d2f/dθdΦ}, {d2f/drdΦ, d2f/dθdΦ, d2f/dΦ2}sGradient- gradient with respect to spherical coordinates {df/dr, df/dθ, df/dΦ}- Returns:
- Hessian with respect to Cartesian coordinates {{d2f/dx2, d2f/dxdy, d2f/dxdz}, {d2f/dxdy, d2f/dy2, d2f/dydz}, {d2f/dxdz, d2f/dydz, d2f/dz2}}
-
computeJacobian
private void computeJacobian()Lazy evaluation of (r, θ, φ) Jacobian. -
computeHessians
private void computeHessians()Lazy evaluation of Hessians. -
writeReplace
Replace the instance with a data transfer object for serialization.- Returns:
- data transfer object that will be serialized
-