View Javadoc

    1   /*
    2    * Licensed to the Apache Software Foundation (ASF) under one or more
    3    * contributor license agreements.  See the NOTICE file distributed with
    4    * this work for additional information regarding copyright ownership.
    5    * The ASF licenses this file to You under the Apache License, Version 2.0
    6    * (the "License"); you may not use this file except in compliance with
    7    * the License.  You may obtain a copy of the License at
    8    *
    9    *      http://www.apache.org/licenses/LICENSE-2.0
    10   *
    11   * Unless required by applicable law or agreed to in writing, software
    12   * distributed under the License is distributed on an "AS IS" BASIS,
    13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    14   * See the License for the specific language governing permissions and
    15   * limitations under the License.
    16   */
    17  package org.apache.commons.geometry.euclidean.twod;
    18
    19  import java.text.MessageFormat;
    20
    21  import org.apache.commons.geometry.core.RegionLocation;
    22  import org.apache.commons.geometry.core.Transform;
    23  import org.apache.commons.geometry.core.partitioning.Split;
    24
    25  /** Class representing the span of a line in 2D Euclidean space. This is the set of all points
    26   * contained by the line.
    27   *
    28   * <p>Instances of this class are guaranteed to be immutable.</p>
    29   */
    30  final class LineSpanningSubset extends LineConvexSubset {
    31
    32      /** Construct a new instance for the given line.
    33       * @param line line to construct the span for
    34       */
    35      LineSpanningSubset(final Line line) {
    36          super(line);
    37      }
    38
    39      /** {@inheritDoc}
    40       *
    41       * <p>This method always returns {@code true}.</p>
    42       */
    43      @Override
    44      public boolean isFull() {
    45          return true;
    46      }
    47
    48      /** {@inheritDoc}
    49      *
    50      * <p>This method always returns {@code true}.</p>
    51      */
    52      @Override
    53      public boolean isInfinite() {
    54          return true;
    55      }
    56
    57      /** {@inheritDoc}
    58      *
    59      * <p>This method always returns {@code false}.</p>
    60      */
    61      @Override
    62      public boolean isFinite() {
    63          return false;
    64      }
    65
    66      /** {@inheritDoc}
    67      *
    68      * <p>This method always returns {@link Double#POSITIVE_INFINITY}.</p>
    69      */
    70      @Override
    71      public double getSize() {
    72          return Double.POSITIVE_INFINITY;
    73      }
    74
    75      /** {@inheritDoc}
    76       *
    77       * <p>This method always returns {@code null}.</p>
    78       */
    79      @Override
    80      public Vector2D getCentroid() {
    81          return null;
    82      }
    83
    84      /** {@inheritDoc}
    85      *
    86      * <p>This method always returns {@code null}.</p>
    87      */
    88      @Override
    89      public Vector2D getStartPoint() {
    90          return null;
    91      }
    92
    93      /** {@inheritDoc}
    94      *
    95      * <p>This method always returns {@link Double#NEGATIVE_INFINITY}.</p>
    96      */
    97      @Override
    98      public double getSubspaceStart() {
    99          return Double.NEGATIVE_INFINITY;
    100     }
    101
    102     /** {@inheritDoc}
    103     *
    104     * <p>This method always returns {@code null}.</p>
    105     */
    106     @Override
    107     public Vector2D getEndPoint() {
    108         return null;
    109     }
    110
    111     /** {@inheritDoc}
    112      *
    113      * <p>This method always returns {@link Double#POSITIVE_INFINITY}.</p>
    114      */
    115     @Override
    116     public double getSubspaceEnd() {
    117         return Double.POSITIVE_INFINITY;
    118     }
    119
    120     /** {@inheritDoc}
    121     *
    122     * <p>This method always returns {@code null}.</p>
    123     */
    124     @Override
    125     public Bounds2D getBounds() {
    126         return null; // infinite; no bounds
    127     }
    128
    129     /** {@inheritDoc} */
    130     @Override
    131     public LineSpanningSubset transform(final Transform<Vector2D> transform) {
    132         return new LineSpanningSubset(getLine().transform(transform));
    133     }
    134
    135     /** {@inheritDoc} */
    136     @Override
    137     public LineSpanningSubset reverse() {
    138         return new LineSpanningSubset(getLine().reverse());
    139     }
    140
    141     /** {@inheritDoc} */
    142     @Override
    143     public String toString() {
    144         final Line line = getLine();
    145
    146         return MessageFormat.format(Line.TO_STRING_FORMAT,
    147                 getClass().getSimpleName(),
    148                 line.getOrigin(),
    149                 line.getDirection());
    150     }
    151
    152     /** {@inheritDoc} */
    153     @Override
    154     RegionLocation classifyAbscissa(final double abscissa) {
    155         return RegionLocation.INSIDE;
    156     }
    157
    158     /** {@inheritDoc} */
    159     @Override
    160     double closestAbscissa(final double abscissa) {
    161         return abscissa;
    162     }
    163
    164     /** {@inheritDoc} */
    165     @Override
    166     Split<LineConvexSubset> splitOnIntersection(final Line splitter, final Vector2D intersection) {
    167         final Line line = getLine();
    168
    169         final ReverseRay low = new ReverseRay(line, intersection);
    170         final Ray high = new Ray(line, intersection);
    171
    172         return createSplitResult(splitter, low, high);
    173     }
    174 }