gishur.x
Class XUPolygon

java.lang.Object
  |
  +--gishur.x.XObject
        |
        +--gishur.x.XPolyline
              |
              +--gishur.x.XUPolygon
All Implemented Interfaces:
AffineXTransformable, AreaIntersectable, java.lang.Cloneable, Cloneable, Intersectable, java.io.Serializable

public class XUPolygon
extends XPolyline
implements AreaIntersectable

Ein unbeschränktes Polygon.

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

Field Summary
static byte ORIENTATION_LEFT
          'Innen' liegt links von der Kette.
static byte ORIENTATION_RIGHT
          'Innen' liegt rechts von der Kette.
 
Fields inherited from interface gishur.x.AreaIntersectable
POINT_INSIDE, POINT_ON_EDGE, POINT_OUTSIDE
 
Constructor Summary
XUPolygon()
          Leerer Konstruktor.
XUPolygon(SimpleList L)
          Konstruiert ein Polygon aus der Liste L mit XPoint-, XSegment- und XRay-Objekten.
XUPolygon(XPoint[] points)
          Konstruiert ein XPolygon mit dem Punktarray points.
XUPolygon(XUPolygon pol)
          Copy-Konstruktor.
 
Method Summary
 XSegment borderSegment(int i)
          Liefert das Randsegment Nummer i.
 java.lang.Object clone()
          Überschreibt Object.clone().
 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 copy(XUPolygon pol)
          Copy-Routine übernimmt Daten von anderen Objekten.
 int countBorderSegments()
          Liefert die Anzahl der Randsegmente.
 boolean equals(java.lang.Object O)
          Überschreibt Object.equals(Object)
 int findBorderIndex(int pointindex, boolean start)
          Sucht das Randelement, das mit dem Punkt mit Index pointindex beginnt, falls start==true bzw. endet, falls start==false.
 XPolygon getInfiniteXPolygon()
          Liefert das Schnittpolygon des unbeschränkten Polygons mit der 'unendlichen' Bounding Box.
 boolean in(XPoint q)
          Ein Point-in-Polygon Test.
 XRay inRay()
          Liefert den einfallenden Strahl.
 Area intersection(AreaIntersectable O, boolean is_convex)
          Flächenschnitt mit dem Objekt O.
 Intersection intersection(java.lang.Object O)
          Schneidet dieses Objekt mit dem Objekt O und liefert ein entsprechendes Intersection-Objekt.
 boolean isAngle()
          Liefert true, falls das unbeschränkte Polygon ein Winkel ist.
 boolean isHalfplane()
          Liefert true, falls das unbeschränkte Polygon eine Halbebene ist.
 XLine line(int i)
          Liefert eine Gerade durch den i-ten und (i+1)-ten Punkt des Polygons.
 byte locate(XPoint q)
          Point-Location.
 byte orientation()
          Liefert die Orientierung des unbeschränkten Polygons, also die Seite, auf der an jedem Segment (oder Strahl) 'innen' liegt.
 XRay outRay()
          Liefert den ausfallenden Strahl.
 void set(SimpleList L)
          Übernimmt die Polygonkettenpunkte aus der Liste L.
 void setInRay(XRay ray)
          Setzt den einfallenden Strahl auf die Daten von ray.
 void setOrientation(byte orientation)
          Definiert das 'Innere' des unbeschränkten Polygons neu.
 void setOutRay(XRay ray)
          Setzt den ausfallenden Strahl auf die Daten von ray.
 boolean supportsIntersection(AreaIntersectable O, boolean is_convex)
          Liefert true, falls diese Klasse den Schnitt mit dem übergebenen Gebiet unterstützt.
 boolean supportsIntersection(java.lang.Object O)
          Liefert true, falls diese Klasse den Schnitt mit dem übergebenen Objekt unterstützt.
 java.lang.String toString()
          Überschreibt Object.toString().
 java.lang.String toString(boolean len, boolean points, boolean inray, boolean outray, boolean orientation)
          Liefert einen String mit Angaben über das Objekt.
 
Methods inherited from class gishur.x.XPolyline
add, add, checkSimplicity, checkSimplicity, circumference, clear, closestPoint, convex, copy, copy, cycle, empty, findPoint, findPoint, getMinMaxPoints, getSegmentList, indexOf, insert, insert, kinkPoint, length, liesOn, point, remove, reverse, rotate, rotate, scale, segment, set, setPoint, simple, toString, transform_XObject, transform, translate
 
Methods inherited from class gishur.x.XObject
copy, getMutable, inverseTransform_XObject, mutable, restoreMutability, rotate_XObject, scale_XObject, transform_XObject, translate_XObject, translate_XObject
 
Methods inherited from class java.lang.Object
finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface gishur.x.AreaIntersectable
convex
 

Field Detail

ORIENTATION_LEFT

public static final byte ORIENTATION_LEFT
'Innen' liegt links von der Kette.

ORIENTATION_RIGHT

public static final byte ORIENTATION_RIGHT
'Innen' liegt rechts von der Kette.
Constructor Detail

XUPolygon

public XUPolygon()
Leerer Konstruktor. Erzeugt ein leeres Polygon.

XUPolygon

public XUPolygon(XPoint[] points)
Konstruiert ein XPolygon mit dem Punktarray points. Das Array wird kopiert, die enthaltenen Punkte werden als Referenzen übernommen.
Parameters:
points - Punktliste

XUPolygon

public XUPolygon(SimpleList L)
Konstruiert ein Polygon aus der Liste L mit XPoint-, XSegment- und XRay-Objekten.
Parameters:
L - Liste mit Punktdaten.
See Also:
set(gishur.core.SimpleList)

XUPolygon

public XUPolygon(XUPolygon pol)
Copy-Konstruktor.
Parameters:
l - Objekt, von dem Daten übernommen werden
Method Detail

clone

public java.lang.Object clone()
Überschreibt Object.clone().
Overrides:
clone in class XPolyline
See Also:
Object.clone()

toString

public java.lang.String toString(boolean len,
                                 boolean points,
                                 boolean inray,
                                 boolean outray,
                                 boolean orientation)
Liefert einen String mit Angaben über das Objekt.
Parameters:
len - Längeninformationen enthalten
points - Punktinformationen enthalten
inray - Eingangsstrahlinformationen enthalten
outray - Ausgangsstrahlinformationen enthalten
orientation - Orientierungsinformationen enthalten
Returns:
String-Repräsentation des Objektes

toString

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

equals

public boolean equals(java.lang.Object O)
Überschreibt Object.equals(Object)
Overrides:
equals in class XPolyline
Parameters:
O - Objekt, mit dem verglichen werden soll
Returns:
true, falls Objekte gleich
See Also:
Object.equals(java.lang.Object)

copy

public void copy(XUPolygon pol)
Copy-Routine übernimmt Daten von anderen Objekten.
Parameters:
l - Objekt, von dem Daten übernommen werden

inRay

public XRay inRay()
Liefert den einfallenden Strahl.
Returns:
einfallender Strahl

outRay

public XRay outRay()
Liefert den ausfallenden Strahl.
Returns:
ausfallender Strahl

line

public XLine line(int i)
Liefert eine Gerade durch den i-ten und (i+1)-ten Punkt des Polygons. Ist i<0, so wird eine Gerade durch den einfallenden Strahl, ist i>=length()-1, wird eine Gerade durch den ausfallenden Strahl zurückgegeben.
Overrides:
line in class XPolyline
Parameters:
i - Index für die gewünschte Gerade
Returns:
Gerade

countBorderSegments

public int countBorderSegments()
Liefert die Anzahl der Randsegmente. Bei einer Polyline sind alle Randsegment normale Segmente, bei abgeleiteten Klassen können Segmente Randpunkte der 'unendlichen' Bounding-Box enthalten.
Overrides:
countBorderSegments in class XPolyline
Returns:
Anzahl der Randelemente

borderSegment

public XSegment borderSegment(int i)
Liefert das Randsegment Nummer i.
Overrides:
borderSegment in class XPolyline
Parameters:
i - Index des gewünschten Randelements
Returns:
Randelement mit Index i

findBorderIndex

public int findBorderIndex(int pointindex,
                           boolean start)
Sucht das Randelement, das mit dem Punkt mit Index pointindex beginnt, falls start==true bzw. endet, falls start==false.
Overrides:
findBorderIndex in class XPolyline
Parameters:
pointindex - Index des Polygonpunktes
start - falls true wird Randelement zurückgegeben, das mit pointindex beginnt; falls false jenes, das mit pointindex endet
Returns:
Index des Randelements oder -1

set

public void set(SimpleList L)
Übernimmt die Polygonkettenpunkte aus der Liste L. Berücksichtigt werden XPoint, XSegment und XRay-Objekte. Sind zwei aufeinanderfolgende Punkte gleich, wird nur einer übernommen. Alle Punkte werden kopiert.
Overrides:
set in class XPolyline
Parameters:
L - Liste mit Punktdaten

setInRay

public void setInRay(XRay ray)
Setzt den einfallenden Strahl auf die Daten von ray. Dabei wird allerdings nicht der Source-Punkt des Strahls angefügt, sondern quasi der Strahl auf den ersten Polygonpunkt verschoben.
Parameters:
ray - Strahl, dessen Daten übernommen werden

setOutRay

public void setOutRay(XRay ray)
Setzt den ausfallenden Strahl auf die Daten von ray. Dabei wird allerdings nicht der Source-Punkt des Strahls angefügt, sondern quasi der Strahl auf den letzten Polygonpunkt verschoben.
Parameters:
ray - Strahl, dessen Daten übernommen werden

isHalfplane

public boolean isHalfplane()
Liefert true, falls das unbeschränkte Polygon eine Halbebene ist.
Returns:
true, falls Halbebene

isAngle

public boolean isAngle()
Liefert true, falls das unbeschränkte Polygon ein Winkel ist.
Returns:
true, falls Winkel

orientation

public byte orientation()
Liefert die Orientierung des unbeschränkten Polygons, also die Seite, auf der an jedem Segment (oder Strahl) 'innen' liegt.
Returns:
eine Orientierungskonstante, die angibt, auf welcher Seite 'Innen' ist.

setOrientation

public void setOrientation(byte orientation)
Definiert das 'Innere' des unbeschränkten Polygons neu.
Parameters:
orientation - neue Konstante für das Innere des unbeschränkten Polygons

in

public boolean in(XPoint q)
Ein Point-in-Polygon Test. Gibt true zurück, falls der Punkt p innerhalb des Polygons liegt. Auf einer Polygonkante zählt hierbei als außerhalb. Benutzt locatePoint. Vorbedingungen: Das unbeschränkte Polygon muß einfach und konvex sein!
Parameters:
p - zu testender Punkt
Returns:
true, falls p innerhalb des Polygons liegt, ansonsten false
See Also:
locate(gishur.x.XPoint)

locate

public byte locate(XPoint q)
Point-Location. Je nach Position des Punktes p wird eine der drei Konstanten zurückgegeben: Vorbedingungen: Das unbeschränkte Polygon muß einfach sein
Specified by:
locate in interface AreaIntersectable
Parameters:
p - zu lokalisierender Punkt
Returns:
POINT_INSIDE, POINT_OUTSIDE oder POINT_ON_EDGE, je nach Lage des Punktes.

getInfiniteXPolygon

public XPolygon getInfiniteXPolygon()
Liefert das Schnittpolygon des unbeschränkten Polygons mit der 'unendlichen' Bounding Box. Das unendliche Polygon ist immer links orientiert!
Returns:
Schnittpolygon

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.
Overrides:
contains in class XPolyline
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.
Overrides:
supportsIntersection in class XPolyline
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.
Overrides:
intersection in class XPolyline
Parameters:
O - zu schneidendes Objekt
Throws:
IntersectionException - falls der Schnitt nicht durchgeführt werden konnte.

supportsIntersection

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

intersection

public Area intersection(AreaIntersectable O,
                         boolean is_convex)
Flächenschnitt mit dem Objekt O. Diese Methode sollte am Besten nur von einem Area-Objekt aufgerufen werden. Kann der Schnitt nicht berechnet werden, sollte ein IntersectionException ausgelöst werden (dies sollte aber in Übereinstimmung mit supportsAreaIntersection geschehen). Es kann sein, das Schnitte falsch berechnet werden und kein Exception ausgelöst wird, obwohl supportsAreaIntersection false liefert. Der Aufruf von supportsAreaIntersection sollte also vorausgehen.
Specified by:
intersection in interface AreaIntersectable
Parameters:
O - zu schneidendes Objekt
is_convex - falls true, ist das Objekt O konvex
Throws:
IntersectionException - falls der Schnitt nicht durchgeführt werden konnte.