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.core.partitioning;
    18
    19  import org.apache.commons.geometry.core.Point;
    20  import org.apache.commons.geometry.core.Transform;
    21
    22  /** Extension of the {@link HyperplaneSubset} interface with the additional restriction
    23   * that instances represent convex regions of space.
    24   * @param <P> Point implementation type
    25   */
    26  public interface HyperplaneConvexSubset<P extends Point<P>> extends HyperplaneSubset<P> {
    27
    28      /** Reverse the orientation of the hyperplane for this instance, returning the result as
    29       * a new instance. The returned subset contains the same points but has a reversed orientation.
    30       * @return a hyperplane convex subset representing the same region but with the
    31       *      opposite orientation.
    32       */
    33      HyperplaneConvexSubset<P> reverse();
    34
    35      /** {@inheritDoc}
    36       *
    37       * <p>The parts resulting from a split operation with a convex subset
    38       * are guaranteed to also be convex.</p>
    39       */
    40      @Override
    41      Split<? extends HyperplaneConvexSubset<P>> split(Hyperplane<P> splitter);
    42
    43      /** {@inheritDoc}
    44       *
    45       * <p>Hyperplane convex subsets subjected to affine transformations remain
    46       * convex.</p>
    47       */
    48      @Override
    49      HyperplaneConvexSubset<P> transform(Transform<P> transform);
    50  }