All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.commons.geometry.euclidean.twod.LineConvexSubset Maven / Gradle / Ivy

/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.apache.commons.geometry.euclidean.twod;

import java.util.Collections;
import java.util.List;

import org.apache.commons.geometry.core.Transform;
import org.apache.commons.geometry.core.partitioning.Hyperplane;
import org.apache.commons.geometry.core.partitioning.HyperplaneConvexSubset;
import org.apache.commons.geometry.core.partitioning.Split;
import org.apache.commons.geometry.euclidean.oned.Interval;

/** Class representing a convex subset of a line in 2D Euclidean space. Instances
 * need not be finite, in which case the start or end point (or both) will be null.
 * Line segments and rays are examples of convex line subsets.
 * @see Lines
 */
public abstract class LineConvexSubset extends LineSubset implements HyperplaneConvexSubset {

    /** Construct a new instance for the given line.
     * @param line line containing this line subset
     */
    LineConvexSubset(final Line line) {
        super(line);
    }

    /** {@inheritDoc} */
    @Override
    public List toConvex() {
        return Collections.singletonList(this);
    }

    /** {@inheritDoc}
     *
     * 

This method always returns {@code false}.

*/ @Override public boolean isEmpty() { return false; } /** Get the start point for the subset. * @return the start point for the subset, or null if no start point exists */ public abstract Vector2D getStartPoint(); /** Get the 1D start location of the subset or {@link Double#NEGATIVE_INFINITY} if * no start location exists. * @return the 1D start location of the subset or {@link Double#NEGATIVE_INFINITY} if * no start location exists. */ public abstract double getSubspaceStart(); /** Get the end point for the subset. * @return the end point for the subset, or null if no end point exists. */ public abstract Vector2D getEndPoint(); /** Get the 1D end location of the subset or {@link Double#POSITIVE_INFINITY} if * no end location exists. * @return the 1D end location of the subset or {@link Double#POSITIVE_INFINITY} if * no end location exists */ public abstract double getSubspaceEnd(); /** {@inheritDoc} */ @Override public Interval getSubspaceRegion() { final double start = getSubspaceStart(); final double end = getSubspaceEnd(); return Interval.of(start, end, getPrecision()); } /** Get the 1D interval for the region. This method is an alias for {@link #getSubspaceRegion()}. * @return the 1D interval for the region. */ public Interval getInterval() { return getSubspaceRegion(); } /** {@inheritDoc} */ @Override public Split split(final Hyperplane splitter) { final Line thisLine = getLine(); final Line splitterLine = (Line) splitter; final Vector2D intersection = splitterLine.intersection(thisLine); if (intersection == null) { return getNonIntersectingSplitResult(splitterLine, this); } return splitOnIntersection(splitterLine, intersection); } /** {@inheritDoc} */ @Override public Vector2D closest(final Vector2D pt) { final Line line = getLine(); final double abscissa = line.abscissa(pt); return line.toSpace(closestAbscissa(abscissa)); } /** {@inheritDoc} */ @Override public abstract LineConvexSubset transform(Transform transform); /** {@inheritDoc} */ @Override public abstract LineConvexSubset reverse(); /** Get the closest value in the subspace region to the given abscissa. * @param abscissa input abscissa * @return the closest value in the subspace region to the given abscissa */ abstract double closestAbscissa(double abscissa); /** Split this instance using the given splitter line and intersection point. * @param splitter splitter line * @param intersection intersection point between the splitter line and the line * for this instance * @return the result of splitting this instance with the given splitter line and intersection * point */ abstract Split splitOnIntersection(Line splitter, Vector2D intersection); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy