gishur.x
Class XParabola

java.lang.Object
  |
  +--gishur.x.XObject
        |
        +--gishur.x.XParabola
All Implemented Interfaces:
java.lang.Cloneable, Cloneable, Intersectable, java.io.Serializable

public class XParabola
extends XObject
implements Intersectable

Eine Parabel der Form y=a*x²+b in beliebiger Lage in der Ebene.

Version:
1.0
Author:
Thomas Wolf
See Also:
Serialized Form

Constructor Summary
XParabola(double a, double b, double phi, XPoint v)
          Parabel-Konstruktor.
XParabola(XBaseline l, XPoint p)
          Bisektor-Konstruktor.
XParabola(XParabola para)
          Copy-Konstruktor.
 
Method Summary
 XPoint calculatePoint(double x)
          Berechnet den Punkt auf der Parabel mit der X-Koordinate x.
 boolean contains(double x, double y)
          Liefert true, falls das Objekt den Punkt (x,y) enthält, d.h. der Schnitt mit dem Punkt nicht leer ist.
 void flip()
          Vertauscht Source und Target und ändert somit die Orientierung des Parabelstückes.
 double[] getBoxInterval(double minx, double miny, double maxx, double maxy)
          Bestimmt ein Parameterintervall für ein Parabelstück, das in dem Rechteck, das durch (minx,miny)-(maxx,maxy) beschrieben ist, liegt (zeitweise darf die Parabel aber das Fenster verlassen).
 double getIntervalParameter(boolean upper)
          Liefert den oberen bzw. unteren Intervallparameter für das Parabelintervall.
 double getParameter(XPoint p)
          Berechnet den Parameter der Kurve für einen gegebene Punkt.
 double[] getXParameters(double x)
          Berechnet die Parameter bei einem Schnitt mit einer senkrechten Geraden mit der X-Koordinate x.
 double[] getYParameters(double y)
          Berechnet die Parameter bei einem Schnitt mit einer waagerechten Geraden mit der Y-Koordinate y.
 Intersection intersection(java.lang.Object O)
          Schneidet dieses Objekt mit dem Objekt O und liefert ein entsprechendes Intersection-Objekt.
 boolean liesOn(XPoint q)
          Liefert true, falls p auf der Parabel liegt.
 XPoint point(double t)
          Berechnet den Punkt auf der Parabel mit Parameter t.
 void setSource(double t)
          Setzt den Startparameter des Parabelbogens.
 void setSource(XPoint p)
          Setzt den Startpunkt des Parabelbogens.
 void setTarget(double t)
          Setzt den Zielparameter des Parabelbogens.
 void setTarget(XPoint p)
          Setzt den Endpunkt des Parabelbogens.
 XPoint source()
          Liefert den Startpunkt des Parabel-Intervalls.
 boolean supportsIntersection(java.lang.Object O)
          Liefert true, falls diese Klasse den Schnitt mit dem übergebenen Objekt unterstützt.
 XPoint target()
          Liefert den Endpunkt des Parabel-Intervalls.
 java.lang.String toString()
          Überschreibt Object.toString().
 XObject transform_XObject(double m00, double m01, double m02, double m10, double m11, double m12)
          Transforms this XObject by the given affine transformation matrix.
 boolean validParameter(double t)
          Überprüft die Gültigkeit des Parameters.
 
Methods inherited from class gishur.x.XObject
clone, copy, getMutable, inverseTransform_XObject, mutable, restoreMutability, rotate_XObject, scale_XObject, transform_XObject, translate_XObject, translate_XObject
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

XParabola

public XParabola(double a,
                 double b,
                 double phi,
                 XPoint v)
Parabel-Konstruktor.
Parameters:
a - Krümmung (Faktor vor x²)
b - Abstand des Scheitelpunktes vom Drehpunkt
phi - Winkel, um den die Parabel gedreht ist
v - Drehpunkt

XParabola

public XParabola(XBaseline l,
                 XPoint p)
Bisektor-Konstruktor.
Parameters:
l - Linienobjekt
p - Punkt

XParabola

public XParabola(XParabola para)
Copy-Konstruktor.
Parameters:
para - Orginalparabel
Method Detail

toString

public java.lang.String toString()
Überschreibt Object.toString().
Overrides:
toString in class XObject
See Also:
Object.toString()

point

public XPoint point(double t)
Berechnet den Punkt auf der Parabel mit Parameter t. Der Parameter bezieht sich auf die Senkrecht zur Achse stehende 'X-Achse'.
Parameters:
t - Parameter

getParameter

public double getParameter(XPoint p)
Berechnet den Parameter der Kurve für einen gegebene Punkt. Liegt der Punkt nicht auf der Parabel, dann wird Double.POSITIVE_INFINITY zurückgegeben.
Parameters:
p - Punkt, dessen Parameter bestimmt wird
Returns:
Kurven-Parameter

getXParameters

public double[] getXParameters(double x)
Berechnet die Parameter bei einem Schnitt mit einer senkrechten Geraden mit der X-Koordinate x. Die zurückgegebenen Parameter müssen nicht gültg sein (d.h. sie müssen nicht Punkte im Parabelintervall beschreiben).
Parameters:
x - X-Koordinate, zu der die Parameter berechnet werden sollen
Returns:
aufsteigend sortiertes Array mit double-Werten der Länge 0, 1 oder 2.

getYParameters

public double[] getYParameters(double y)
Berechnet die Parameter bei einem Schnitt mit einer waagerechten Geraden mit der Y-Koordinate y. Die zurückgegebenen Parameter müssen nicht gültg sein (d.h. sie müssen nicht Punkte im Parabelintervall beschreiben).
Parameters:
y - Y-Koordinate, zu der die Parameter berechnet werden sollen
Returns:
aufsteigend sortiertes Array mit double-Werten der Länge 0, 1 oder 2.

getBoxInterval

public double[] getBoxInterval(double minx,
                               double miny,
                               double maxx,
                               double maxy)
Bestimmt ein Parameterintervall für ein Parabelstück, das in dem Rechteck, das durch (minx,miny)-(maxx,maxy) beschrieben ist, liegt (zeitweise darf die Parabel aber das Fenster verlassen).
Parameters:
minx,miny,maxx,maxy - Rechteck
Returns:
Array mit minimalem und maximalen Parameter oder null, falls nichts im Fenster

calculatePoint

public XPoint calculatePoint(double x)
Berechnet den Punkt auf der Parabel mit der X-Koordinate x. Gibt es keinen Punkt auf dem Parabel mit X-Koordinate x, wird null zurückgegeben. Gibt es zwei Punkte mit der X-Koordinate x, dann wird der Punkt mit kleinerer Y-Koordinate zurückgegeben.
Parameters:
x - X-Koordinate
Returns:
Punkt auf der Parabel oder null

getIntervalParameter

public double getIntervalParameter(boolean upper)
Liefert den oberen bzw. unteren Intervallparameter für das Parabelintervall. Wurde kein Intervall festgelegt, wird Double.NEGATIVE_INFINITY bzw. Double.POSITIVE_INFINITY zurückgegeben.
Parameters:
upper - falls true, wird der größere Grenzparameter ansonsten der kleinere zurückgegeben
Returns:
selektierter Parameter

validParameter

public boolean validParameter(double t)
Überprüft die Gültigkeit des Parameters.
Parameters:
zu - prüfender Parameter
Returns:
true, falls Parameter gültig ist

source

public XPoint source()
Liefert den Startpunkt des Parabel-Intervalls.
Returns:
Startpunkt oder null, falls kein Intervall

target

public XPoint target()
Liefert den Endpunkt des Parabel-Intervalls.
Returns:
Endpunkt oder null, falls kein Intervall

liesOn

public boolean liesOn(XPoint q)
Liefert true, falls p auf der Parabel liegt.
Parameters:
p - zu testender Punkt
Returns:
true, falls p auf der Parabel

setSource

public void setSource(double t)
Setzt den Startparameter des Parabelbogens.
Parameters:
t - Startparameter

setTarget

public void setTarget(double t)
Setzt den Zielparameter des Parabelbogens.
Parameters:
t - Zielparameter

setSource

public void setSource(XPoint p)
Setzt den Startpunkt des Parabelbogens.
Parameters:
p - Startpunkt

setTarget

public void setTarget(XPoint p)
Setzt den Endpunkt des Parabelbogens.
Parameters:
p - Endpunkt

flip

public void flip()
Vertauscht Source und Target und ändert somit die Orientierung des Parabelstückes.

contains

public boolean contains(double x,
                        double y)
Liefert true, falls das Objekt den Punkt (x,y) enthält, d.h. der Schnitt mit dem Punkt nicht leer ist.
Specified by:
contains in interface Intersectable
Parameters:
x,y - Koordinaten des Punktes
Returns:
true, falls Schnitt nicht leer.

supportsIntersection

public boolean supportsIntersection(java.lang.Object O)
Liefert true, falls diese Klasse den Schnitt mit dem übergebenen Objekt unterstützt. Hier sollte wirklich nur dann true zurückgegeben werden, wenn in dieser Klasse eine entsprechende Schnittroutine existiert.
Specified by:
supportsIntersection in interface Intersectable
Parameters:
O - zu schneidendes Objekt
Returns:
true, falls Schnittest erfolgen kann

intersection

public Intersection intersection(java.lang.Object O)
Schneidet dieses Objekt mit dem Objekt O und liefert ein entsprechendes Intersection-Objekt. Dieses ist immer !=null, was nicht heißt, daß ein Schnitt existiert. Existiert keine passende Schnittmethode in dieser Klasse, so wird versucht, die Schnittmethode des Objektes O aufzurufen, falls vorhanden. Schlägt alles fehl, so wird ein IntersectionException ausgelöst (der nicht unbedingt abgefangen werden muß, da es ein RuntimeException ist.
Specified by:
intersection in interface Intersectable
Parameters:
O - zu schneidendes Objekt
Throws:
IntersectionException - falls der Schnitt nicht durchgeführt werden konnte.

transform_XObject

public XObject transform_XObject(double m00,
                                 double m01,
                                 double m02,
                                 double m10,
                                 double m11,
                                 double m12)
Transforms this XObject by the given affine transformation matrix.
Overrides:
transform_XObject in class XObject
Parameters:
m00,m01,m02 - first row of the transformation matrix
m10,m11,m12 - second row of the transformation matrix
Returns:
Transformed XObject (this, only if it is mutable, otherwise a new XObject represeting the transformed object).