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  }