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;
18  
19  import org.apache.commons.geometry.core.Transform;
20  
21  /** Interface representing affine transforms in Euclidean space. An affine transform is one that preserves
22   * points, straight lines, planes, and sets of parallel lines. Common affine transforms include translation,
23   * rotation, scaling, reflection and any compositions thereof.
24   *
25   * @param <V> Vector implementation type
26   * @see <a href="https://en.wikipedia.org/wiki/Affine_transformation">Affine Transformation</a>
27   */
28  public interface EuclideanTransform<V extends EuclideanVector<V>> extends Transform<V> {
29  
30      /** Apply this transform to the given vector, ignoring translations.
31      *
32      * <p>This method can be used to transform vector instances representing displacements between points.
33      * For example, if {@code v} represents the difference between points {@code p1} and {@code p2},
34      * then {@code transform.applyVector(v)} will represent the difference between {@code p1} and {@code p2}
35      * after {@code transform} is applied.
36      * </p>
37      *
38      * @param vec the vector to transform
39      * @return the new, transformed vector
40      */
41      V applyVector(V vec);
42  }