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.threed.line;
18  
19  import java.text.MessageFormat;
20  
21  import org.apache.commons.geometry.core.Transform;
22  import org.apache.commons.geometry.euclidean.threed.Bounds3D;
23  import org.apache.commons.geometry.euclidean.threed.Vector3D;
24  
25  /** Class representing the span of a line in 3D 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 LineSpanningSubset3D extends LineConvexSubset3D {
31  
32      /** Construct a new instance for the given line.
33       * @param line line to construct the span for
34       */
35      LineSpanningSubset3D(final Line3D line) {
36          super(line);
37      }
38  
39      /** {@inheritDoc}
40      *
41      * <p>This method always returns {@code true}.</p>
42      */
43      @Override
44      public boolean isInfinite() {
45          return true;
46      }
47  
48      /** {@inheritDoc}
49      *
50      * <p>This method always returns {@code false}.</p>
51      */
52      @Override
53      public boolean isFinite() {
54          return false;
55      }
56  
57      /** {@inheritDoc}
58      *
59      * <p>This method always returns {@link Double#POSITIVE_INFINITY}.</p>
60      */
61      @Override
62      public double getSize() {
63          return Double.POSITIVE_INFINITY;
64      }
65  
66      /** {@inheritDoc}
67      *
68      * <p>This method always returns {@code null}.</p>
69      */
70      @Override
71      public Vector3D getStartPoint() {
72          return null;
73      }
74  
75      /** {@inheritDoc}
76      *
77      * <p>This method always returns {@link Double#NEGATIVE_INFINITY}.</p>
78      */
79      @Override
80      public double getSubspaceStart() {
81          return Double.NEGATIVE_INFINITY;
82      }
83  
84      /** {@inheritDoc}
85      *
86      * <p>This method always returns {@code null}.</p>
87      */
88      @Override
89      public Vector3D getEndPoint() {
90          return null;
91      }
92  
93      /** {@inheritDoc}
94       *
95       * <p>This method always returns {@link Double#POSITIVE_INFINITY}.</p>
96       */
97      @Override
98      public double getSubspaceEnd() {
99          return Double.POSITIVE_INFINITY;
100     }
101 
102     /** {@inheritDoc}
103      *
104      * <p>This method always returns {@code null}.</p>
105      */
106     @Override
107     public Vector3D getCentroid() {
108         return null; // infinite; no center
109     }
110 
111     /** {@inheritDoc}
112     *
113     * <p>This method always returns {@code null}.</p>
114     */
115     @Override
116     public Bounds3D getBounds() {
117         return null; // infinite; no bounds
118     }
119 
120     /** {@inheritDoc} */
121     @Override
122     public LineSpanningSubset3D transform(final Transform<Vector3D> transform) {
123         return new LineSpanningSubset3D(getLine().transform(transform));
124     }
125 
126     /** {@inheritDoc} */
127     @Override
128     public String toString() {
129         final Line3D line = getLine();
130 
131         return MessageFormat.format(Line3D.TO_STRING_FORMAT,
132                 getClass().getSimpleName(),
133                 line.getOrigin(),
134                 line.getDirection());
135     }
136 
137     /** {@inheritDoc} */
138     @Override
139     boolean containsAbscissa(final double abscissa) {
140         return true;
141     }
142 }