mfc.geometry
Class HermitianCircle

java.lang.Object
  extended bymfc.matrix.AbstractComplex2By2
      extended bymfc.matrix.HermitianComplex2By2
          extended bymfc.geometry.HermitianCircle
All Implemented Interfaces:
java.lang.Cloneable, java.io.Serializable

public class HermitianCircle
extends HermitianComplex2By2
implements java.io.Serializable, java.lang.Cloneable

A class to represent oriented circles in 2-dimensional Moebius geometry.

An oriented circle is represented by a hermitian complex 2×2-matrix with non-positive determinant.

Matrices which differ by a positive factor represent the same oriented circle.

Matrices which differ by a negative factor represent the same circle with opposite orientation.

See Also:
Serialized Form

Field Summary
 
Fields inherited from class mfc.matrix.AbstractComplex2By2
aIm, aRe, bIm, bRe, cIm, cRe, dIm, dRe, EPS, EPSILON, EPSSQR
 
Constructor Summary
HermitianCircle()
          Create unit circle in plane (= equator in Rieman sphere).
HermitianCircle(HermitianCircle c)
           
 
Method Summary
 void apply(Complex2By2 m)
          For test purposes: Assign this with m-1 this m-1 *.
 void apply(Moebius m)
          Assign this with m-1 this m-1 *.
 void assignEuclidean(ComplexProjective1 center, double radius)
          Assign by euclidean center and euclidean radius.
 void assignEuclidean(double m1, double m2, double r)
          Assign by euclidean center and euclidean radius.
 void assignHyperbolic(Complex z, double r)
          Assign by hyperbolic center and hyperbolic radius.
 void assignHyperbolic(ComplexProjective1 z, double r)
          Assign by hyperbolic center and hyperbolic radius.
 void assignHyperbolic(double m1, double m2, double r)
          Assign by hyperbolic center and hyperbolic radius.
 void assignLorentzVector(double x0, double x1, double x2, double x3)
          Assign by Lorentz vector.
 void assignSpherical(ComplexProjective1 center, double radius)
          Assign by spherical center and spherical radius.
 void assignThrough(ComplexProjective1 z1, ComplexProjective1 z2, ComplexProjective1 z3)
           Assign by prescribing 3 points on the circle.
 boolean equals(HermitianCircle circ)
          Test for equality.
 void euclideanCenter(Complex center)
          Calculate the euclidean center in the complex plane.
 void euclideanCenter(ComplexProjective1 center)
          Calculate the euclidean center in the complex plane.
 double euclideanRadius()
          Return the euclidean radius.
 void setARe(double v)
          Set the value of aRe.
 void setB(Complex b)
          Set the value of the upper right element.
 void setC(Complex c)
          Set the value of the lower left element.
 void setDRe(double v)
          Set the value of dRe.
 void sphericalCenter(ComplexProjective1 center)
          Calculate the spherical center in 1-dimensional complex projective space.
 void sphericalCenter(Real3 center)
          Calculate the spherical center in real 3-space.
 double sphericalRadius()
          Return the spherical radius.
 
Methods inherited from class mfc.matrix.HermitianComplex2By2
assign, assign, assign, assignAdjoinedWith, assignConjugateWith, getARe, getDRe, lorentzVectorX0, lorentzVectorX1, lorentzVectorX2, lorentzVectorX3, realDeterminant
 
Methods inherited from class mfc.matrix.AbstractComplex2By2
abs, absSqr, assign, assign, assign, assignAdjoined, assignAdjoined, assignAdjugate, assignAdjugate, assignByColumn, assignByEigenvectors, assignByEigenvectors, assignConjugate, assignConjugate, assignDivide, assignDivide, assignDivide, assignDivide, assignDivide, assignDivide, assignDivide, assignDivide, assignIdentity, assignInvert, assignInvert, assignMinus, assignMinus, assignMinus, assignMinus, assignMinus, assignMinus, assignMinus, assignMinus, assignNeg, assignNeg, assignNormalizeDeterminant, assignNormalizeDeterminant, assignPlus, assignPlus, assignPlus, assignPlus, assignPlus, assignPlus, assignPlus, assignPlus, assignStar, assignStar, assignTimes, assignTimes, assignTimes, assignTimes, assignTimes, assignTimes, assignTimes, assignTimes, assignTranspose, assignTranspose, assignZero, determinant, determinant, dist, distSqr, divide, equals, getA, getA, getB, getB, getC, getC, getD, getD, getEigenValues, getEigenValues, getEigenValues, minus, norm, normSqr, plus, setA, setD, times, times, toString, trace, trace
 
Methods inherited from class java.lang.Object
clone, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

HermitianCircle

public HermitianCircle()
Create unit circle in plane (= equator in Rieman sphere).


HermitianCircle

public HermitianCircle(HermitianCircle c)
Method Detail

setARe

public void setARe(double v)
            throws java.lang.IllegalArgumentException
Set the value of aRe.

Overrides:
setARe in class HermitianComplex2By2
Parameters:
v - value to assign to aRe
Throws:
java.lang.IllegalArgumentException - if determinant would become positive

setB

public void setB(Complex b)
          throws java.lang.IllegalArgumentException
Set the value of the upper right element. Also sets the lower left element to the complex conjugate.

Overrides:
setB in class HermitianComplex2By2
Parameters:
b - a Complex
Throws:
java.lang.IllegalArgumentException - if determinant would become positive

setC

public void setC(Complex c)
          throws java.lang.IllegalArgumentException
Set the value of the lower left element. Also sets the upper right element to the complex conjugate.

Overrides:
setC in class HermitianComplex2By2
Parameters:
c - a Complex.
Throws:
java.lang.IllegalArgumentException - if determinant would become positive

setDRe

public void setDRe(double v)
            throws java.lang.IllegalArgumentException
Set the value of dRe.

Overrides:
setDRe in class HermitianComplex2By2
Parameters:
v - Value to assign to dRe.
Throws:
java.lang.IllegalArgumentException - if determinant would become positive

assignThrough

public void assignThrough(ComplexProjective1 z1,
                          ComplexProjective1 z2,
                          ComplexProjective1 z3)

Assign by prescribing 3 points on the circle.


assignLorentzVector

public void assignLorentzVector(double x0,
                                double x1,
                                double x2,
                                double x3)
                         throws java.lang.IllegalArgumentException

Assign by Lorentz vector.

The arguments must satisfy  x02 - x12 - x22 - x32 <= 0.0

Overrides:
assignLorentzVector in class HermitianComplex2By2
Throws:
java.lang.IllegalArgumentException - if arguments do not satisfy above condition

equals

public boolean equals(HermitianCircle circ)
Test for equality.

Parameters:
circ - the circle to compare this with
Returns:
true if this and circ represent the same oriented circle, false otherwise.

assignSpherical

public void assignSpherical(ComplexProjective1 center,
                            double radius)
Assign by spherical center and spherical radius.

Parameters:
center - a ComplexProjective1: the spherical center
radius - a double: the spherical radius

sphericalRadius

public double sphericalRadius()
Return the spherical radius.

Returns:
a double between 0 and π: the spherical radius

sphericalCenter

public void sphericalCenter(Real3 center)
Calculate the spherical center in real 3-space. Since the circles are oriented, the spherical center is unique.

Parameters:
center - a Real3 used to hand over the result

sphericalCenter

public void sphericalCenter(ComplexProjective1 center)
Calculate the spherical center in 1-dimensional complex projective space. Since the circles are oriented, the spherical center is unique.

Parameters:
center - a ComplexProjective1 used to hand over the result

assignEuclidean

public void assignEuclidean(ComplexProjective1 center,
                            double radius)
Assign by euclidean center and euclidean radius.

Parameters:
center - a ComplexProjective1: the Euclidean center

assignEuclidean

public void assignEuclidean(double m1,
                            double m2,
                            double r)
Assign by euclidean center and euclidean radius.

TODO: maybe one should rather implement this using assignEuclidean(ComplexProjective1, double)?

Parameters:
m1 - a double: the x coordinate of the euclidean center
m2 - a double: the y coordinate of the euclidean center
r - a double: the euclidean radius

euclideanRadius

public double euclideanRadius()
Return the euclidean radius. The result may be negative according to the orientation of the circle

Returns:
a double

euclideanCenter

public void euclideanCenter(Complex center)
Calculate the euclidean center in the complex plane.

Parameters:
center - a Complex used to hand over the result

euclideanCenter

public void euclideanCenter(ComplexProjective1 center)
Calculate the euclidean center in the complex plane.

Parameters:
center - a ComplexProjective1 used to hand over the result

assignHyperbolic

public void assignHyperbolic(double m1,
                             double m2,
                             double r)
Assign by hyperbolic center and hyperbolic radius.

Parameters:
m1 - a double: the x coordinate of the hyperbolic center (in the Poincare unit disc model)
m2 - a double: the y coordinate of the hyperbolic center (in the Poincare unit disc model)
r - a double: the hyperbolic radius
Throws:
{@link - IllegalArgumentException} if m1 * m1 + m2 * m2 >= 1

assignHyperbolic

public void assignHyperbolic(Complex z,
                             double r)
Assign by hyperbolic center and hyperbolic radius.

Parameters:
z - a Complex: the hyperbolic center (in the Poincare unit disc model)
r - a double: the hyperbolic radius
Throws:
{@link - IllegalArgumentException} if |z| >= 1

assignHyperbolic

public void assignHyperbolic(ComplexProjective1 z,
                             double r)
Assign by hyperbolic center and hyperbolic radius.

Parameters:
z - a ComplexProjective1: the hyperbolic center (in the Poincare unit disc model)
r - a double: the hyperbolic radius
Throws:
{@link - IllegalArgumentException} if z does not lie inside the unit circle

apply

public void apply(Moebius m)
Assign this with m-1 this m-1 *.

Parameters:
m - an Moebius: the Moebius transform to apply

apply

public void apply(Complex2By2 m)
For test purposes: Assign this with m-1 this m-1 *.

Parameters:
m - an Complex2By2: the Moebius transform to apply