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 org.apache.commons.geometry.core.RegionEmbedding;
20  import org.apache.commons.geometry.core.Sized;
21  import org.apache.commons.geometry.core.partitioning.HyperplaneBoundedRegion;
22  import org.apache.commons.geometry.euclidean.oned.Vector1D;
23  import org.apache.commons.geometry.euclidean.threed.Bounds3D;
24  import org.apache.commons.geometry.euclidean.threed.Vector3D;
25  
26  /** Class representing a subset of a line in 3D Euclidean space. For example, line segments,
27   * rays, and disjoint combinations of the two are line subsets. Line subsets may be finite or infinite.
28   */
29  public abstract class LineSubset3D implements RegionEmbedding<Vector3D, Vector1D>, Sized {
30      /** The line containing this instance. */
31      private final Line3D line;
32  
33      /** Construct a new instance based on the given line.
34       * @param line line containing the instance
35       */
36      LineSubset3D(final Line3D line) {
37          this.line = line;
38      }
39  
40      /** Get the line containing this subset.
41       * @return the line containing this subset
42       */
43      public Line3D getLine() {
44          return line;
45      }
46  
47      /** {@inheritDoc} */
48      @Override
49      public Vector3D toSpace(final Vector1D pt) {
50          return line.toSpace(pt);
51      }
52  
53      /** {@inheritDoc} */
54      @Override
55      public Vector1D toSubspace(final Vector3D pt) {
56          return line.toSubspace(pt);
57      }
58  
59      /** Get the centroid, or geometric center, of the line subset or null if
60       * the subset is empty or infinite.
61       * @return the centroid of the line subset, or null if the subset is empty or
62       *      infinite
63       */
64      public abstract Vector3D getCentroid();
65  
66      /** Get the 3D bounding box of the line subset or null if the subset is
67       * empty or infinite.
68       * @return the 3D bounding box the line subset or null if the subset is
69       *      empty or infinite
70       */
71      public abstract Bounds3D getBounds();
72  
73      /** Get the subspace region for the instance.
74       * @return the subspace region for the instance
75       */
76      @Override
77      public abstract HyperplaneBoundedRegion<Vector1D> getSubspaceRegion();
78  }