AlgorithmId.java

/* Copyright 2013-2020 CS GROUP
 * Licensed to CS GROUP (CS) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * CS 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.orekit.rugged.api;


/** Enumerate for Digital Elevation Model intersection.
 * @author Luc Maisonobe
 */
public enum AlgorithmId {

    /** Fast algorithm due to Bernardt Duvenhage.
     * <p>
     * The algorithm is described in the 2009 paper:
     * <a href="http://researchspace.csir.co.za/dspace/bitstream/10204/3041/1/Duvenhage_2009.pdf">Using
     * An Implicit Min/Max KD-Tree for Doing Efficient Terrain Line of Sight Calculations</a>.
     * </p>
     */
    DUVENHAGE,

    /** Fast algorithm due to Bernardt Duvenhage.
     * <p>
     * The algorithm is described in the 2009 paper:
     * <a href="http://researchspace.csir.co.za/dspace/bitstream/10204/3041/1/Duvenhage_2009.pdf">Using
     * An Implicit Min/Max KD-Tree for Doing Efficient Terrain Line of Sight Calculations</a>.
     * </p>
     * <p>
     * This version of the duvenhage's algorithm considers the body to be flat, i.e. lines computed
     * from entry/exit points in the Digital Elevation Model are considered to be straight lines
     * also in geodetic coordinates. The sagitta resulting from real ellipsoid curvature is therefore
     * <em>not</em> corrected in this case. As this computation is not costly (a few percents overhead),
     * the full {@link #DUVENHAGE} is recommended instead of this one. This choice is mainly intended
     * for comparison purposes with other systems.
     * </p>
     */
    DUVENHAGE_FLAT_BODY,

    /** Basic, <em>very slow</em> algorithm, designed only for tests and validation purposes.
     * <p>
     * The algorithm simply computes entry and exit points at high and low altitudes,
     * and scans all Digital Elevation Models in the sub-tiles defined by these two
     * corner points. It is not designed for operational use.
     * </p>
     */
    BASIC_SLOW_EXHAUSTIVE_SCAN_FOR_TESTS_ONLY,

    /** Algorithm that simply uses a constant elevation over ellipsoid.
     * <p>
     * Intersections are computed only with respect to the reference ellipsoid
     * and a user-specified elevation. If the user-specified elevation is 0.0,
     * then this algorithm is equivalent to {@link #IGNORE_DEM_USE_ELLIPSOID},
     * only slower.
     * </p>
     */
    CONSTANT_ELEVATION_OVER_ELLIPSOID,

    /** Dummy algorithm that simply ignores the Digital Elevation Model.
     * <p>
     * Intersections are computed only with respect to the reference ellipsoid.
     * </p>
     * <p>
     * This algorithm is equivalent to {@link #CONSTANT_ELEVATION_OVER_ELLIPSOID}
     * when the elevation is set to 0.0, but this one is much faster in this
     * specific case.
     * </p>
     */
    IGNORE_DEM_USE_ELLIPSOID

}