public class BorderLine extends Object
It provides methods for measuring the distance between different BorderLine instances, merging multiple instances, modifying and efficiently moving them around.
Modifier and Type | Class and Description |
---|---|
static class |
BorderLine.Segment
The handle of a segment of a borderline.
|
Constructor and Description |
---|
BorderLine(double value)
Creates a new BorderLine with the given value from -Double.MAX_VALUE to Double.MAX_VALUE.
|
BorderLine(double min,
double max,
double value)
Creates a new BorderLine from a single segment.
|
BorderLine(double min,
double max,
double valueAtMin,
double valueAtMax)
Creates a new BorderLine from a single segment.
|
Modifier and Type | Method and Description |
---|---|
void |
addOffset(double delta)
Adds the given offset to the segments' positions.
|
void |
addValueOffset(double delta)
Adds the given offset to the current values of the whole borderline.
|
void |
adoptValues(BorderLine other)
Convenience method that copies the actual data from the given argument to this instance.
|
BorderLine |
createCopy(boolean negateValues,
boolean negateOffsets)
Creates a copy of this borderline.
|
BorderLine |
createMax(BorderLine other)
Merges this borderline with the given borderline using the "maximum" policy.
|
BorderLine |
createMin(BorderLine other)
Merges this borderline with the given borderline using the "minimum" policy.
|
BorderLine.Segment |
firstSegment()
Returns the first segment or
null if there is no such segment. |
double |
getDistanceTo(BorderLine greater)
Calculates the minimal distance between this borderline and the other one.
|
double |
getMax()
Gets the greatest position of this borderline.
|
double |
getMax(BorderLine.Segment s)
Returns the maximum position of the given segment.
|
double |
getMaxValue()
Gets the maximum value that is set on this borderline.
|
double |
getMaxValue(double from,
double to)
Calculates the maximum value in the interval from->to.
|
double |
getMin()
Gets the smallest position of this borderline.
|
double |
getMin(BorderLine.Segment s)
Returns the minimum position of the given segment.
|
double |
getMinValue()
Gets the minimum value that is set on this borderline.
|
double |
getMinValue(double from,
double to)
Calculates the minimum value in the interval from->to.
|
BorderLine.Segment |
getSegmentAt(double pos)
Returns the segment at the given position.
|
double |
getSlope(BorderLine.Segment s)
Returns the slope of the given segment.
|
double |
getValue(BorderLine.Segment s)
Returns the value of the minimum of the given segment.
|
double |
getValueAt(BorderLine.Segment segment,
double pos)
Returns the value that is set on this borderline at the specified position.
|
double |
getValueAt(double pos)
Returns the value that is set on this borderline at the specified position.
|
double |
getValueAt(ListCell cell,
double pos)
Returns the value that is set on this borderline at the specified position.
|
void |
grow(double toMin,
double toMax,
boolean positive)
|
BorderLine.Segment |
lastSegment()
Returns the last segment or
null if there is no such segment. |
void |
mergeWithMax(BorderLine other)
Merges this borderline with the given borderline using the "maximum" policy.
|
void |
mergeWithMin(BorderLine other)
Merges this borderline with the given borderline using the "minimum" policy.
|
BorderLine.Segment |
next(BorderLine.Segment s)
Returns the next segment or
null if there is no such segment. |
BorderLine.Segment |
prev(BorderLine.Segment s)
Returns the previous segment or
null if there is no such segment. |
void |
setMaxValue(double min,
double max,
double value)
Assures that all values in the given interval are greater or equal than the given value.
|
void |
setMinValue(double min,
double max,
double value)
Assures that all values in the given interval are less or equal than the given value.
|
void |
setSloped(double min,
double max,
double value,
double slope)
Sets a specific interval to a slope starting at a given value.
|
void |
setValue(double min,
double max,
double value)
Sets a specific interval described by
min and max to a given value. |
String |
toString()
Returns a lengthy String representation of this borderline.
|
public BorderLine(double value)
value
- the value of the segmentpublic BorderLine(double min, double max, double value)
min
- the beginning of this borderlinemax
- the ending of this borderlinevalue
- the value of the segmentpublic BorderLine(double min, double max, double valueAtMin, double valueAtMax)
min
- the beginning of this borderlinemax
- the ending of this borderlinevalueAtMin
- the value of the segment at the beginning of this borderlinevalueAtMax
- the value of the segment at the ending of this borderlinepublic void addOffset(double delta)
This method has complexity O(1).
delta
- the delta to add to the positionspublic void addValueOffset(double delta)
This method has complexity O(1).
delta
- the delta to add to the valuespublic void adoptValues(BorderLine other)
other
- the argument to retrieve the values frompublic BorderLine createCopy(boolean negateValues, boolean negateOffsets)
Optionally negates the values or offsets.
negateValues
- whether the values are negatednegateOffsets
- whether the offsets are negatedpublic BorderLine createMax(BorderLine other)
That means the resulting borderline will have greater value of both borderline on each position. If you imagine each borderline as a the upper border of a plane, the resulting borderline will be the upper border of the merged planes.
other
- the other borderlinepublic BorderLine createMin(BorderLine other)
That means the resulting borderline will have smaller value of both borderline on each position. If you imagine each borderline as a the lower border of a plane, the resulting borderline will be the lower border of the merged planes.
other
- the other borderlinepublic BorderLine.Segment firstSegment()
null
if there is no such segment.public double getDistanceTo(BorderLine greater)
The other one is treated as if the values were all greater.
public double getMax()
public double getMax(BorderLine.Segment s)
s
- the segmentpublic double getMaxValue()
public double getMaxValue(double from, double to)
public double getMin()
public double getMin(BorderLine.Segment s)
s
- the segmentpublic double getMinValue()
public double getMinValue(double from, double to)
public BorderLine.Segment getSegmentAt(double pos)
pos
- the positionpublic double getSlope(BorderLine.Segment s)
s
- the segmentpublic double getValue(BorderLine.Segment s)
If the segment's slope is 0, it's the value of the whole segment. In case the slope differs from 0, it's the value of the start of the slope.
s
- the segmentpublic double getValueAt(BorderLine.Segment segment, double pos)
The position must lie within the range of the segment.
IllegalArgumentException
- if pos
is outside the segment's range.segment
- The segment whose value shall be returned.pos
- the position where the value will be retrieved.public double getValueAt(double pos)
IndexOutOfBoundsException
- if the position is outside of the borderline.pos
- the positionpublic double getValueAt(ListCell cell, double pos)
The position must lie within the range of the segment that is stored in cell
.
IllegalArgumentException
- if pos
is outside the segment's range that is stored in cell
.cell
- The list cell containing the segment whose value shall be returned.pos
- the positionpublic void grow(double toMin, double toMax, boolean positive)
values
of the BorderLine stay the
same however their start
and end
points are moved in the direction of
toMin
and toMax
.
This is useful for scenarios where a BorderLine is needed that consists of an enlarged border.
Note that this method normalizes the segments, i.e., it transforms each segment with slope != 0 to a segment with slope == 0.
toMin
- the delta by which the border should be extended towards -InfinitytoMax
- the delta by which the border should be extended towards +Infinitypositive
- whether the BorderLine should be interpreted to point in positive direction. This influences the direction into which a
segment's border is extended.public BorderLine.Segment lastSegment()
null
if there is no such segment.public void mergeWithMax(BorderLine other)
other
- the other borderlinepublic void mergeWithMin(BorderLine other)
other
- the other borderlinepublic BorderLine.Segment next(BorderLine.Segment s)
null
if there is no such segment.public BorderLine.Segment prev(BorderLine.Segment s)
null
if there is no such segment.public void setMaxValue(double min, double max, double value)
min
- the lower end of the intervalmax
- the upper end of the intervalvalue
- the smallest possible value for the intervalpublic void setMinValue(double min, double max, double value)
min
- the lower end of the intervalmax
- the upper end of the intervalvalue
- the greatest possible value for the intervalpublic void setSloped(double min, double max, double value, double slope)
IllegalArgumentException
- if min
is greater than max
.min
- the left side of the interval.max
- the right side of the interval.value
- the value at min
where the slope starts.slope
- the slope of the segment in the given interval.public void setValue(double min, double max, double value)
min
and max
to a given value.min
- the left side of the interval.max
- the right side of the interval.value
- the value for the whole interval.