gishur.x.voronoi
Class SkEdge

java.lang.Object
  |
  +--gishur.x.voronoi.SkEdge
All Implemented Interfaces:
java.lang.Cloneable, Cloneable

public class SkEdge
extends java.lang.Object
implements Cloneable

Eine Kante des Skeletts. Sie repräsentiert entweder ein Segmentstück oder ein Parabelstück. Eine richtige Skelettkante besteht aber möglicherweise aus mehreren solcher Stücke.

Version:
1.0
Author:
Thomas Wolf

Field Summary
static int CONCAVE_EDGE
           
static int FREE
           
static byte LINEAR
          Konstante für segmentmäßige Kanten
static int LINK_BACKWARD
           
static int LINK_BOTH
           
static int LINK_FORWARD
           
static byte PARABOLIC
          Konstante für parabolische Kanten
 
Constructor Summary
SkEdge(Skeleton sk, SKR left, SKR right)
          Erzeugt eine neue Kante zwischen den Skelettregionen left und right.
SkEdge(Skeleton sk, XPoint start, SKR left, SKR right, SkEdge leftbefore, SkEdge rightbefore)
          Erzeugt eine neue Kante zwischen den Skelettregionen left und right.
 
Method Summary
 Intersectable base()
          Liefert das grafische Element der Kante.
 java.lang.Object clone()
          Clones the object flat.
static XLine constructBisector(XPoint l, XPoint r)
          Konstruiert den Bisektor zwischen zwei Punkten.
static XParabola constructBisector(XSegment l, XPoint r)
          Konstruiert den parabolischen Bisektorteil zwischen einem Punkt und einem Segment.
static XSegment constructBisector(XSegment l, XSegment r)
          Bestimmt den Bisektorteil zwischen zwei Segmenten.
 boolean contains(XPoint p)
          Liefert true, falls der Punkt p auf der Kante liegt.
 boolean empty()
          Gibt true zurück, falls das Stück leer ist.
 ListItem ID()
          Liefert die ID für das Skelett.
 ListItem ID(SKR v)
          Liefert die ID für die entsprechende Skelettregion oder null.
 XPoint intersect(SkEdge e, XPoint p)
          Berechnet den zu p nächsten Schnittpunkt mit der Kante e.
 boolean isSkeletonVertex(boolean target)
          Liefert true, falls der Start/Zielpunkt der Kante ein echter Skelettpunkt ist - ein komplett berechnetes Skelett vorausgesetzt.
 SKR left()
          Liefert die linke Skelettregion.
 ListItem leftID()
          Liefert die ID für die linke Skelettregion.
 int linktype()
          Liefert den Linktyp der Kante (eine der Konstanten FREE, CONVEX_EDGE, LINK_FORWARD, LINK_BACKWARD).
 SkEdge nextLeftEdge()
          Liefert die Kante, die bei linker Umrundung des Zielpunktes als nächste kommt.
 SkEdge nextRealLeftEdge()
          Liefert die Kante, die bei linker Umrundung des Zielpunktes als nächste kommt, wenn man durch konkave Ecken enstandene Skelettkanten ignoriert.
 SkEdge nextRightEdge()
          Liefert die Kante, die bei rechter Umrundung des Zielpunktes als nächste kommt.
 SKR opposite(SKR one)
          Liefert die gegenüberliegende Skelettregion zu one oder null.
 ListItem oppositeID(SKR one)
          Liefert die ID zur gegenüberliegenden Skelettregion von one oder null.
 SkEdge prevLeftEdge()
          Liefert die Kante, die bei linker Umrundung des Startpunktes als nächste kommt.
 SkEdge prevRightEdge()
          Liefert die Kante, die bei rechter Umrundung des Startpunktes als nächste kommt.
 void remove()
          Entfernt die Kante aus allen Strukturen.
 SKR right()
          Liefert die rechte Skelettregion.
 ListItem rightID()
          Liefert die ID für die rechte Skelettregion.
 void setLinktype(SkEdge e)
          Setzt den Link-Typ, wenn die Kanten this und e inzidieren.
 XPoint source()
          Liefert den Startpunkt.
 XPoint target()
          Liefert den Endpunkt.
 java.lang.String toString()
          Überschreibt Object.toString().
 void trim(XPoint c, boolean target)
          Beschneidet das Element auf den Punkt c. c muß auf der Kante liegen, d.h. contains(c.x,c.y) muß true zurückgeben.
 void trim(XPoint c, boolean left, SKR region)
          Beschneidet die Kante auf den Punkt c.
 byte type()
          Liefert den Typ der Kante: LINEAR oder PARABOLIC.
 XParabola xparabola()
          Liefert das Parabelstück der Kante, falls sie parabolisch ist.
 XSegment xsegment()
          Liefert das Segment der Kante, falls sie linear ist.
 
Methods inherited from class java.lang.Object
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

LINEAR

public static final byte LINEAR
Konstante für segmentmäßige Kanten

PARABOLIC

public static final byte PARABOLIC
Konstante für parabolische Kanten

FREE

public static final int FREE

CONCAVE_EDGE

public static final int CONCAVE_EDGE

LINK_FORWARD

public static final int LINK_FORWARD

LINK_BACKWARD

public static final int LINK_BACKWARD

LINK_BOTH

public static final int LINK_BOTH
Constructor Detail

SkEdge

public SkEdge(Skeleton sk,
              SKR left,
              SKR right)
Erzeugt eine neue Kante zwischen den Skelettregionen left und right. Dieser Konstruktor ist nur für das erster Voronoidiagramm gedacht.
Parameters:
sk - zugehöriges Skelett
left,right - zugeordnete linke und rechte Skelettregion

SkEdge

public SkEdge(Skeleton sk,
              XPoint start,
              SKR left,
              SKR right,
              SkEdge leftbefore,
              SkEdge rightbefore)
Erzeugt eine neue Kante zwischen den Skelettregionen left und right.
Parameters:
sk - zugehöriges Skelett
start - Startpunkt
left,right - zugeordnete linke und rechte Skelettregion
leftbefore,rightbefore - letztes Element in der linken bzw. rechten Skelettregion
Method Detail

clone

public java.lang.Object clone()
Clones the object flat.
Specified by:
clone in interface Cloneable
Overrides:
clone in class java.lang.Object
Returns:
cloned object
See Also:
Cloneable

toString

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

constructBisector

public static XLine constructBisector(XPoint l,
                                      XPoint r)
Konstruiert den Bisektor zwischen zwei Punkten. Das ergebnis ist eine Gerade mit der Orientierung - von l nach r gesehen - nach rechts.
Parameters:
l,r - linker und rechter Punkt

constructBisector

public static XSegment constructBisector(XSegment l,
                                         XSegment r)
Bestimmt den Bisektorteil zwischen zwei Segmenten. Das Ergebnis ist ein Segment oder null, falls dieser Bisektorteil nicht existiert. Das Segment l muß entgegen r orientiert sein. Das Segment ist so orientiert, wie das rechte.
Parameters:
l,r - linkes und rechtes Segment
Returns:
Segment

constructBisector

public static XParabola constructBisector(XSegment l,
                                          XPoint r)
Konstruiert den parabolischen Bisektorteil zwischen einem Punkt und einem Segment. Das Ergebnis ist ein Parabelstück, das so wie das Segment orientiert ist.
Parameters:
l - Segment
r - Punkt
Returns:
prabolischer Bisektorteil

empty

public boolean empty()
Gibt true zurück, falls das Stück leer ist.
Returns:
true, falls Kante keine Daten enthält

source

public XPoint source()
Liefert den Startpunkt.
Returns:
Startpunkt

target

public XPoint target()
Liefert den Endpunkt.
Returns:
Endpunkt

base

public Intersectable base()
Liefert das grafische Element der Kante.
Returns:
graf. Element

xsegment

public XSegment xsegment()
Liefert das Segment der Kante, falls sie linear ist.
Returns:
Segment

xparabola

public XParabola xparabola()
Liefert das Parabelstück der Kante, falls sie parabolisch ist.
Returns:
Parabelstück

type

public byte type()
Liefert den Typ der Kante: LINEAR oder PARABOLIC.
Returns:
Typ der Kante

contains

public boolean contains(XPoint p)
Liefert true, falls der Punkt p auf der Kante liegt.
Parameters:
p - zu testender Punkt
Returns:
true, falls p drauf, sonst false

trim

public void trim(XPoint c,
                 boolean target)
Beschneidet das Element auf den Punkt c. c muß auf der Kante liegen, d.h. contains(c.x,c.y) muß true zurückgeben.
Parameters:
c - neuer Start/Zielpunkt
target - falls true, wird der Zielpunkt gesetzt, sonst der Startpunkt

trim

public void trim(XPoint c,
                 boolean left,
                 SKR region)
Beschneidet die Kante auf den Punkt c.
Parameters:
c - Punkt
left - Umlaufrichtung: Falls true wird der Endpunkt bezüglich linker Umlaufrichtung der Region region beschnitten. Falls false wird der Endpunkt bezüglich rechter Umlaufrichtung der Region region beschnitten, bzw. es wird der Startpunkt bezüglich linker Umlaufrichtung der Region beschnitten.
reg - Skelettregion

intersect

public XPoint intersect(SkEdge e,
                        XPoint p)
Berechnet den zu p nächsten Schnittpunkt mit der Kante e.
Parameters:
e - andere Skelettkante
p - Punkt zum Abstandsvergleich
Returns:
Schnittpunkt

left

public SKR left()
Liefert die linke Skelettregion.
Returns:
linke Region

right

public SKR right()
Liefert die rechte Skelettregion.
Returns:
rechte Region

opposite

public SKR opposite(SKR one)
Liefert die gegenüberliegende Skelettregion zu one oder null.
Parameters:
one - Skelettregion, von der aus wir gehen
Returns:
gegenüberliegende Skelettregion

oppositeID

public ListItem oppositeID(SKR one)
Liefert die ID zur gegenüberliegenden Skelettregion von one oder null.
Parameters:
one - Skelettregion, von der aus wir gehen
Returns:
ID der gegenüberliegenden Skelettregion

ID

public ListItem ID()
Liefert die ID für das Skelett.
Returns:
ID

ID

public ListItem ID(SKR v)
Liefert die ID für die entsprechende Skelettregion oder null.
Returns:
ID

leftID

public ListItem leftID()
Liefert die ID für die linke Skelettregion.
Returns:
linke ID

rightID

public ListItem rightID()
Liefert die ID für die rechte Skelettregion.
Returns:
rechte ID

nextLeftEdge

public SkEdge nextLeftEdge()
Liefert die Kante, die bei linker Umrundung des Zielpunktes als nächste kommt.
Returns:
linke Nachfolgerkante des Ziels

nextRightEdge

public SkEdge nextRightEdge()
Liefert die Kante, die bei rechter Umrundung des Zielpunktes als nächste kommt.
Returns:
rechte Nachfolgerkante des Ziels

prevLeftEdge

public SkEdge prevLeftEdge()
Liefert die Kante, die bei linker Umrundung des Startpunktes als nächste kommt.
Returns:
linke Nachfolgerkante des Starts

prevRightEdge

public SkEdge prevRightEdge()
Liefert die Kante, die bei rechter Umrundung des Startpunktes als nächste kommt.
Returns:
rechte Nachfolgerkante des Starts

nextRealLeftEdge

public SkEdge nextRealLeftEdge()
Liefert die Kante, die bei linker Umrundung des Zielpunktes als nächste kommt, wenn man durch konkave Ecken enstandene Skelettkanten ignoriert.
Returns:
linke Nachfolgerkante des Ziels

isSkeletonVertex

public boolean isSkeletonVertex(boolean target)
Liefert true, falls der Start/Zielpunkt der Kante ein echter Skelettpunkt ist - ein komplett berechnetes Skelett vorausgesetzt.
Parameters:
target - falls true ist der Zielpunkt, sonst der Startpunkt gemeint
Returns:
true, falls echter Skelettpunkt

remove

public void remove()
Entfernt die Kante aus allen Strukturen.

setLinktype

public void setLinktype(SkEdge e)
Setzt den Link-Typ, wenn die Kanten this und e inzidieren.
Parameters:
e - Kante

linktype

public int linktype()
Liefert den Linktyp der Kante (eine der Konstanten FREE, CONVEX_EDGE, LINK_FORWARD, LINK_BACKWARD).
Returns:
Typ