org.apache.commons.math3.geometry.euclidean.threed

## Class SubLine

- java.lang.Object
- - org.apache.commons.math3.geometry.euclidean.threed.SubLine

    public class SubLine
    extends Object

This class represents a subset of a `Line`.

Since:
  3.0
Version:
  $Id: SubLine.java 1416643 2012-12-03 19:37:14Z tn $

### Field Summary

Fields
`private Line` `line` Underlying line.
`private IntervalsSet` `remainingRegion` Remaining region of the hyperplane.

### Constructor Summary

Constructors
Constructor and Description
`SubLine(Line line, IntervalsSet remainingRegion)` Simple constructor.
`SubLine(Segment segment)` Create a sub-line from a segment.
`SubLine(Vector3D start, Vector3D end)` Create a sub-line from two endpoints.

### Method Summary

Methods
`private static IntervalsSet` `buildIntervalSet(Vector3D start, Vector3D end)` Build an interval set from two points.
`List<Segment>` `getSegments()` Get the endpoints of the sub-line.
`Vector3D` `intersection(SubLine subLine, boolean includeEndPoints)` Get the intersection of the instance and another sub-line.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

### Field Detail

#### line

    private final Line line

Underlying line.

#### remainingRegion

    private final IntervalsSet remainingRegion

Remaining region of the hyperplane.

### Constructor Detail

#### SubLine

    public SubLine(Line line,
           IntervalsSet remainingRegion)

Simple constructor.

Parameters:
  `line` - underlying line
  `remainingRegion` - remaining region of the line

#### SubLine

    public SubLine(Vector3D start,
           Vector3D end)
            throws MathIllegalArgumentException

Create a sub-line from two endpoints.

Parameters:
  `start` - start point
  `end` - end point
Throws:
  `MathIllegalArgumentException` - if the points are equal

#### SubLine

    public SubLine(Segment segment)
            throws MathIllegalArgumentException

Create a sub-line from a segment.

Parameters:
  `segment` - single segment forming the sub-line
Throws:
  `MathIllegalArgumentException` - if the segment endpoints are equal

### Method Detail

#### getSegments

    public List<Segment> getSegments()

Get the endpoints of the sub-line.

A subline may be any arbitrary number of disjoints segments, so the endpoints are provided as a list of endpoint pairs. Each element of the list represents one segment, and each segment contains a start point at index 0 and an end point at index 1. If the sub-line is unbounded in the negative infinity direction, the start point of the first segment will have infinite coordinates. If the sub-line is unbounded in the positive infinity direction, the end point of the last segment will have infinite coordinates. So a sub-line covering the whole line will contain just one row and both elements of this row will have infinite coordinates. If the sub-line is empty, the returned list will contain 0 segments.

Returns:
  list of segments endpoints

#### intersection

    public Vector3D intersection(SubLine subLine,
                        boolean includeEndPoints)

Get the intersection of the instance and another sub-line.

This method is related to the `intersection` method in the `Line` class, but in addition to compute the point along infinite lines, it also checks the point lies on both sub-line ranges.

Parameters:
  `subLine` - other sub-line which may intersect instance
  `includeEndPoints` - if true, endpoints are considered to belong to instance (i.e. they are closed sets) and may be returned, otherwise endpoints are considered to not belong to instance (i.e. they are open sets) and intersection occurring on endpoints lead to null being returned
Returns:
  the intersection point if there is one, null if the sub-lines don't intersect

#### buildIntervalSet

    private static IntervalsSet buildIntervalSet(Vector3D start,
                                Vector3D end)
                                          throws MathIllegalArgumentException

Build an interval set from two points.

Parameters:
  `start` - start point
  `end` - end point
Returns:
  an interval set
Throws:
  `MathIllegalArgumentException` - if the points are equal